diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/ElasticSearchException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/ElasticSearchException.java index 425642e02a5..189b789d67a 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/ElasticSearchException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/ElasticSearchException.java @@ -19,6 +19,8 @@ package org.elasticsearch; +import org.elasticsearch.rest.RestStatus; + /** * A base class for all elasticsearch exceptions. * @@ -46,6 +48,28 @@ public class ElasticSearchException extends RuntimeException { super(msg, cause); } + /** + * Returns the rest status code associated with this exception. + */ + public RestStatus status() { + ElasticSearchException current = this; + while (current instanceof ElasticSearchWrapperException) { + if (getCause() == null) { + break; + } + if (getCause() instanceof ElasticSearchException) { + current = (ElasticSearchException) getCause(); + } else { + break; + } + } + if (current == this) { + return RestStatus.INTERNAL_SERVER_ERROR; + } else { + return current.status(); + } + } + /** * Unwraps the actual cause from the exception for cases when the exception is a * {@link ElasticSearchWrapperException}. diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/http/HttpServer.java b/modules/elasticsearch/src/main/java/org/elasticsearch/http/HttpServer.java index 46e8b2ec3e8..c65323a4dc3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/http/HttpServer.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/http/HttpServer.java @@ -34,7 +34,7 @@ import org.elasticsearch.threadpool.ThreadPool; import java.io.IOException; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java b/modules/elasticsearch/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java index 5956dfc34a7..906684c08e6 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/http/netty/NettyHttpChannel.java @@ -27,8 +27,8 @@ import org.elasticsearch.common.netty.channel.ChannelFutureListener; import org.elasticsearch.common.netty.handler.codec.http.*; import org.elasticsearch.http.HttpChannel; import org.elasticsearch.http.HttpException; -import org.elasticsearch.http.HttpResponse; import org.elasticsearch.rest.RestResponse; +import org.elasticsearch.rest.RestStatus; import java.io.IOException; import java.util.Set; @@ -123,7 +123,7 @@ public class NettyHttpChannel implements HttpChannel { } } - private HttpResponseStatus getStatus(HttpResponse.Status status) { + private HttpResponseStatus getStatus(RestStatus status) { switch (status) { case CONTINUE: return HttpResponseStatus.CONTINUE; diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/DocumentAlreadyExistsEngineException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/DocumentAlreadyExistsEngineException.java index c7718df3ec8..3a5df80aa2e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/DocumentAlreadyExistsEngineException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/DocumentAlreadyExistsEngineException.java @@ -20,6 +20,7 @@ package org.elasticsearch.index.engine; import org.elasticsearch.index.shard.ShardId; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -29,4 +30,8 @@ public class DocumentAlreadyExistsEngineException extends EngineException { public DocumentAlreadyExistsEngineException(ShardId shardId, String type, String id) { super(shardId, "[" + type + "][" + id + "]: document already exists"); } + + @Override public RestStatus status() { + return RestStatus.CONFLICT; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/VersionConflictEngineException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/VersionConflictEngineException.java index 742c41e5c7f..2a504b88549 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/VersionConflictEngineException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/engine/VersionConflictEngineException.java @@ -20,6 +20,7 @@ package org.elasticsearch.index.engine; import org.elasticsearch.index.shard.ShardId; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -29,4 +30,8 @@ public class VersionConflictEngineException extends EngineException { public VersionConflictEngineException(ShardId shardId, String type, String id, long current, long required) { super(shardId, "[" + type + "][" + id + "]: version conflict, current [" + current + "], required [" + required + "]"); } + + @Override public RestStatus status() { + return RestStatus.CONFLICT; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MapperParsingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MapperParsingException.java index 18e4661cfec..da72d91bb2c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MapperParsingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MapperParsingException.java @@ -19,6 +19,8 @@ package org.elasticsearch.index.mapper; +import org.elasticsearch.rest.RestStatus; + /** * @author kimchy (Shay Banon) */ @@ -31,4 +33,9 @@ public class MapperParsingException extends MapperException { public MapperParsingException(String message, Throwable cause) { super(message, cause); } + + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MergeMappingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MergeMappingException.java index a3a3439eeb6..f2498fd8350 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MergeMappingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/MergeMappingException.java @@ -19,6 +19,8 @@ package org.elasticsearch.index.mapper; +import org.elasticsearch.rest.RestStatus; + import java.util.Arrays; /** @@ -36,4 +38,8 @@ public class MergeMappingException extends MapperException { public String[] failures() { return failures; } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/StrictDynamicMappingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/StrictDynamicMappingException.java index 4817e4affce..b45ef537508 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/StrictDynamicMappingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/StrictDynamicMappingException.java @@ -19,6 +19,8 @@ package org.elasticsearch.index.mapper; +import org.elasticsearch.rest.RestStatus; + /** * @author kimchy (shay.banon) */ @@ -27,4 +29,8 @@ public class StrictDynamicMappingException extends MapperException { public StrictDynamicMappingException(String fieldName) { super("mapping set to strict, dynamic introduction of [" + fieldName + "] is not allowed"); } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/XContentDocumentMapper.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/XContentDocumentMapper.java index f878e6b197d..11520bc2323 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/XContentDocumentMapper.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/mapper/xcontent/XContentDocumentMapper.java @@ -395,11 +395,11 @@ public class XContentDocumentMapper implements DocumentMapper, ToXContent { int countDownTokens = 0; XContentParser.Token token = parser.nextToken(); if (token != XContentParser.Token.START_OBJECT) { - throw new MapperException("Malformed content, must start with an object"); + throw new MapperParsingException("Malformed content, must start with an object"); } token = parser.nextToken(); if (token != XContentParser.Token.FIELD_NAME) { - throw new MapperException("Malformed content, after first object, either the type field or the actual properties should exist"); + throw new MapperParsingException("Malformed content, after first object, either the type field or the actual properties should exist"); } if (parser.currentName().equals(type)) { // first field is the same as the type, this might be because the type is provided, and the object exists within it diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/query/QueryParsingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/query/QueryParsingException.java index 81a96ea9a79..f42dd5bca8e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/query/QueryParsingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/query/QueryParsingException.java @@ -21,6 +21,7 @@ package org.elasticsearch.index.query; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (Shay Banon) @@ -34,4 +35,8 @@ public class QueryParsingException extends IndexException { public QueryParsingException(Index index, String msg, Throwable cause) { super(index, msg, cause); } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexAlreadyExistsException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexAlreadyExistsException.java index 61effe191ce..a0699e5d4e0 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexAlreadyExistsException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexAlreadyExistsException.java @@ -21,6 +21,7 @@ package org.elasticsearch.indices; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -30,4 +31,8 @@ public class IndexAlreadyExistsException extends IndexException { public IndexAlreadyExistsException(Index index) { super(index, "Already exists"); } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexMissingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexMissingException.java index 43a9357bdb8..90ec3943621 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexMissingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexMissingException.java @@ -21,6 +21,7 @@ package org.elasticsearch.indices; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (Shay Banon) @@ -30,4 +31,8 @@ public class IndexMissingException extends IndexException { public IndexMissingException(Index index) { super(index, "missing"); } + + @Override public RestStatus status() { + return RestStatus.NOT_FOUND; + } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateAlreadyExistsException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateAlreadyExistsException.java index f4a56df4811..197dc008e8c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateAlreadyExistsException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateAlreadyExistsException.java @@ -20,6 +20,7 @@ package org.elasticsearch.indices; import org.elasticsearch.ElasticSearchException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -36,4 +37,8 @@ public class IndexTemplateAlreadyExistsException extends ElasticSearchException public String name() { return this.name; } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateMissingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateMissingException.java index 144e34956d6..96575ccba3f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateMissingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/IndexTemplateMissingException.java @@ -20,6 +20,7 @@ package org.elasticsearch.indices; import org.elasticsearch.ElasticSearchException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -36,4 +37,9 @@ public class IndexTemplateMissingException extends ElasticSearchException { public String name() { return this.name; } + + + @Override public RestStatus status() { + return RestStatus.NOT_FOUND; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidAliasNameException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidAliasNameException.java index 8c91aaff98c..4f3f04ae237 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidAliasNameException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidAliasNameException.java @@ -21,6 +21,7 @@ package org.elasticsearch.indices; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -30,4 +31,8 @@ public class InvalidAliasNameException extends IndexException { public InvalidAliasNameException(Index index, String name, String desc) { super(index, "Invalid alias name [" + name + "], " + desc); } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexNameException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexNameException.java index 9baf94cd7c0..0bb1f36cf1b 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexNameException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexNameException.java @@ -21,6 +21,7 @@ package org.elasticsearch.indices; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (Shay Banon) @@ -30,4 +31,9 @@ public class InvalidIndexNameException extends IndexException { public InvalidIndexNameException(Index index, String name, String desc) { super(index, "Invalid index name [" + name + "], " + desc); } + + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexTemplateException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexTemplateException.java index b1bbaf05915..7d617faec00 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexTemplateException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidIndexTemplateException.java @@ -20,6 +20,7 @@ package org.elasticsearch.indices; import org.elasticsearch.ElasticSearchException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -36,4 +37,8 @@ public class InvalidIndexTemplateException extends ElasticSearchException { public String name() { return this.name; } + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidTypeNameException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidTypeNameException.java index b7db76ca34e..366e544174c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidTypeNameException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/InvalidTypeNameException.java @@ -20,6 +20,7 @@ package org.elasticsearch.indices; import org.elasticsearch.index.mapper.MapperException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (Shay Banon) @@ -29,4 +30,9 @@ public class InvalidTypeNameException extends MapperException { public InvalidTypeNameException(String message) { super(message); } + + + @Override public RestStatus status() { + return RestStatus.BAD_REQUEST; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/TypeMissingException.java b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/TypeMissingException.java index 81e1c675b24..8c9467b4d37 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/indices/TypeMissingException.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/indices/TypeMissingException.java @@ -21,6 +21,7 @@ package org.elasticsearch.indices; import org.elasticsearch.index.Index; import org.elasticsearch.index.IndexException; +import org.elasticsearch.rest.RestStatus; /** * @author kimchy (shay.banon) @@ -30,4 +31,9 @@ public class TypeMissingException extends IndexException { public TypeMissingException(Index index, String type) { super(index, "type[" + type + "] missing"); } + + + @Override public RestStatus status() { + return RestStatus.NOT_FOUND; + } } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestResponse.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestResponse.java index 297c57b45a4..ceafb681f8c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestResponse.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestResponse.java @@ -26,466 +26,6 @@ import java.io.IOException; */ public interface RestResponse { - enum Status { - /** - * The client SHOULD continue with its request. This interim response is used to inform the client that the - * initial part of the request has been received and has not yet been rejected by the server. The client - * SHOULD continue by sending the remainder of the request or, if the request has already been completed, - * ignore this response. The server MUST send a final response after the request has been completed. - */ - CONTINUE(100), - /** - * The server understands and is willing to comply with the client's request, via the Upgrade message header field - * (section 14.42), for a change in the application protocol being used on this connection. The server will - * switch protocols to those defined by the response's Upgrade header field immediately after the empty line - * which terminates the 101 response. - */ - SWITCHING_PROTOCOLS(101), - /** - * The request has succeeded. The information returned with the response is dependent on the method - * used in the request, for example: - * - */ - OK(200), - /** - * The request has been fulfilled and resulted in a new resource being created. The newly created resource can - * be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the - * resource given by a Location header field. The response SHOULD include an entity containing a list of resource - * characteristics and location(s) from which the user or user agent can choose the one most appropriate. The - * entity format is specified by the media type given in the Content-Type header field. The origin server MUST - * create the resource before returning the 201 status code. If the action cannot be carried out immediately, the - * server SHOULD respond with 202 (Accepted) response instead. - * - *

A 201 response MAY contain an ETag response header field indicating the current value of the entity tag - * for the requested variant just created, see section 14.19. - */ - CREATED(201), - /** - * The request has been accepted for processing, but the processing has not been completed. The request might - * or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There - * is no facility for re-sending a status code from an asynchronous operation such as this. - * - *

The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for - * some other process (perhaps a batch-oriented process that is only run once per day) without requiring that - * the user agent's connection to the server persist until the process is completed. The entity returned with - * this response SHOULD include an indication of the request's current status and either a pointer to a status - * monitor or some estimate of when the user can expect the request to be fulfilled. - */ - ACCEPTED(202), - /** - * The returned meta information in the entity-header is not the definitive set as available from the origin - * server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or super set - * of the original version. For example, including local annotation information about the resource might - * result in a super set of the meta information known by the origin server. Use of this response code - * is not required and is only appropriate when the response would otherwise be 200 (OK). - */ - NON_AUTHORITATIVE_INFORMATION(203), - /** - * The server has fulfilled the request but does not need to return an entity-body, and might want to return - * updated meta information. The response MAY include new or updated meta information in the form of - * entity-headers, which if present SHOULD be associated with the requested variant. - * - *

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request - * to be sent. This response is primarily intended to allow input for actions to take place without causing a - * change to the user agent's active document view, although any new or updated meta information SHOULD be - * applied to the document currently in the user agent's active view. - * - *

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty - * line after the header fields. - */ - NO_CONTENT(204), - /** - * The server has fulfilled the request and the user agent SHOULD reset the document view which caused the - * request to be sent. This response is primarily intended to allow input for actions to take place via user - * input, followed by a clearing of the form in which the input is given so that the user can easily initiate - * another input action. The response MUST NOT include an entity. - */ - RESET_CONTENT(205), - /** - * The server has fulfilled the partial GET request for the resource. The request MUST have included a Range - * header field (section 14.35) indicating the desired range, and MAY have included an If-Range header - * field (section 14.27) to make the request conditional. - * - *

The response MUST include the following header fields: - *

- * - *

If the 206 response is the result of an If-Range request that used a strong cache validator - * (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result - * of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; - * this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST - * include all of the entity-headers that would have been returned with a 200 (OK) response to the same request. - * - *

A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified - * headers do not match exactly, see 13.5.4. - * - *

A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses. - */ - PARTIAL_CONTENT(206), - /** - * The 207 (Multi-Status) status code provides status for multiple independent operations (see Section 13 for - * more information). - * - *

A Multi-Status response conveys information about multiple resources in situations where multiple status - * codes might be appropriate. The default Multi-Status response body is a text/xml or application/xml HTTP - * entity with a 'multistatus' root element. Further elements contain 200, 300, 400, and 500 series status codes - * generated during the method invocation. 100 series status codes SHOULD NOT be recorded in a 'response' - * XML element. - * - *

Although '207' is used as the overall response status code, the recipient needs to consult the contents - * of the multistatus response body for further information about the success or failure of the method execution. - * The response MAY be used in success, partial success and also in failure situations. - * - *

The 'multistatus' root element holds zero or more 'response' elements in any order, each with - * information about an individual resource. Each 'response' element MUST have an 'href' element - * to identify the resource. - */ - MULTI_STATUS(207), - /** - * The requested resource corresponds to any one of a set of representations, each with its own specific - * location, and agent-driven negotiation information (section 12) is being provided so that the user (or user - * agent) can select a preferred representation and redirect its request to that location. - * - *

Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource - * characteristics and location(s) from which the user or user agent can choose the one most appropriate. - * The entity format is specified by the media type given in the Content-Type header field. Depending upon the - * format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed - * automatically. However, this specification does not define any standard for such automatic selection. - * - *

If the server has a preferred choice of representation, it SHOULD include the specific URI for that - * representation in the Location field; user agents MAY use the Location field value for automatic redirection. - * This response is cacheable unless indicated otherwise. - */ - MULTIPLE_CHOICES(300), - /** - * The requested resource has been assigned a new permanent URI and any future references to this resource - * SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link - * references to the Request-URI to one or more of the new references returned by the server, where possible. - * This response is cacheable unless indicated otherwise. - * - *

The new permanent URI SHOULD be given by the Location field in the response. Unless the request method - * was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). - * - *

If the 301 status code is received in response to a request other than GET or HEAD, the user agent - * MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change - * the conditions under which the request was issued. - */ - MOVED_PERMANENTLY(301), - /** - * The requested resource resides temporarily under a different URI. Since the redirection might be altered on - * occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only - * cacheable if indicated by a Cache-Control or Expires header field. - * - *

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was - * HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). - * - *

If the 302 status code is received in response to a request other than GET or HEAD, the user agent - * MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change - * the conditions under which the request was issued. - */ - FOUND(302), - /** - * The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on - * that resource. This method exists primarily to allow the output of a POST-activated script to redirect the - * user agent to a selected resource. The new URI is not a substitute reference for the originally requested - * resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be - * cacheable. - * - *

The different URI SHOULD be given by the Location field in the response. Unless the request method was - * HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). - */ - SEE_OTHER(303), - /** - * If the client has performed a conditional GET request and access is allowed, but the document has not been - * modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, - * and thus is always terminated by the first empty line after the header fields. - * - *

The response MUST include the following header fields: - *

- * - *

If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include - * other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT - * include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. - * - *

If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response - * and repeat the request without the conditional. - * - *

If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to - * reflect any new field values given in the response. - */ - NOT_MODIFIED(304), - /** - * The requested resource MUST be accessed through the proxy given by the Location field. The Location field - * gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. - * 305 responses MUST only be generated by origin servers. - */ - USE_PROXY(305), - /** - * The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on - * occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only - * cacheable if indicated by a Cache-Control or Expires header field. - * - *

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was - * HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , - * since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain - * the information necessary for a user to repeat the original request on the new URI. - * - *

If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT - * automatically redirect the request unless it can be confirmed by the user, since this might change the - * conditions under which the request was issued. - */ - TEMPORARY_REDIRECT(307), - /** - * The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the - * request without modifications. - */ - BAD_REQUEST(400), - /** - * The request requires user authentication. The response MUST include a WWW-Authenticate header field - * (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request - * with a suitable Authorization header field (section 14.8). If the request already included Authorization - * credentials, then the 401 response indicates that authorization has been refused for those credentials. - * If the 401 response contains the same challenge as the prior response, and the user agent has already attempted - * authentication at least once, then the user SHOULD be presented the entity that was given in the response, - * since that entity might include relevant diagnostic information. HTTP access authentication is explained in - * "HTTP Authentication: Basic and Digest Access Authentication" [43]. - */ - UNAUTHORIZED(401), - /** - * This code is reserved for future use. - */ - PAYMENT_REQUIRED(402), - /** - * The server understood the request, but is refusing to fulfill it. Authorization will not help and the request - * SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the - * request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server - * does not wish to make this information available to the client, the status code 404 (Not Found) can be used - * instead. - */ - FORBIDDEN(403), - /** - * The server has not found anything matching the Request-URI. No indication is given of whether the condition - * is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some - * internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding - * address. This status code is commonly used when the server does not wish to reveal exactly why the request - * has been refused, or when no other response is applicable. - */ - NOT_FOUND(404), - /** - * The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. - * The response MUST include an Allow header containing a list of valid methods for the requested resource. - */ - METHOD_NOT_ALLOWED(405), - /** - * The resource identified by the request is only capable of generating response entities which have content - * characteristics not acceptable according to the accept headers sent in the request. - * - *

Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity - * characteristics and location(s) from which the user or user agent can choose the one most appropriate. - * The entity format is specified by the media type given in the Content-Type header field. Depending upon the - * format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed - * automatically. However, this specification does not define any standard for such automatic selection. - * - *

Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept - * headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User - * agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable. - * - *

If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query - * the user for a decision on further actions. - */ - NOT_ACCEPTABLE(406), - /** - * This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with - * the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge - * applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable - * Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in - * "HTTP Authentication: Basic and Digest Access Authentication" [43]. - */ - PROXY_AUTHENTICATION(407), - /** - * The client did not produce a request within the time that the server was prepared to wait. The client MAY - * repeat the request without modifications at any later time. - */ - REQUEST_TIMEOUT(408), - /** - * The request could not be completed due to a conflict with the current state of the resource. This code is - * only allowed in situations where it is expected that the user might be able to resolve the conflict and - * resubmit the request. The response body SHOULD include enough information for the user to recognize the - * source of the conflict. Ideally, the response entity would include enough information for the user or user - * agent to fix the problem; however, that might not be possible and is not required. - * - *

Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being - * used and the entity being PUT included changes to a resource which conflict with those made by an earlier - * (third-party) request, the server might use the 409 response to indicate that it can't complete the request. - * In this case, the response entity would likely contain a list of the differences between the two versions in - * a format defined by the response Content-Type. - */ - CONFLICT(409), - /** - * The requested resource is no longer available at the server and no forwarding address is known. This condition - * is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to - * the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or - * not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is - * cacheable unless indicated otherwise. - * - *

The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient - * that the resource is intentionally unavailable and that the server owners desire that remote links to that - * resource be removed. Such an event is common for limited-time, promotional services and for resources belonging - * to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable - * resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server - * owner. - */ - GONE(410), - /** - * The server refuses to accept the request without a defined Content-Length. The client MAY repeat the request - * if it adds a valid Content-Length header field containing the length of the message-body in the request message. - */ - LENGTH_REQUIRED(411), - /** - * The precondition given in one or more of the request-header fields evaluated to false when it was tested on - * the server. This response code allows the client to place preconditions on the current resource metainformation - * (header field data) and thus prevent the requested method from being applied to a resource other than the one - * intended. - */ - PRECONDITION_FAILED(412), - /** - * The server is refusing to process a request because the request entity is larger than the server is willing - * or able to process. The server MAY close the connection to prevent the client from continuing the request. - * - *

If the condition is temporary, the server SHOULD include a Retry-After header field to indicate that it - * is temporary and after what time the client MAY try again. - */ - REQUEST_ENTITY_TOO_LARGE(413), - /** - * The server is refusing to service the request because the Request-URI is longer than the server is willing - * to interpret. This rare condition is only likely to occur when a client has improperly converted a POST - * request to a GET request with long query information, when the client has descended into a URI "black hole" - * of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is - * under attack by a client attempting to exploit security holes present in some servers using fixed-length - * buffers for reading or manipulating the Request-URI. - */ - REQUEST_URI_TOO_LONG(414), - /** - * The server is refusing to service the request because the entity of the request is in a format not supported - * by the requested resource for the requested method. - */ - UNSUPPORTED_MEDIA_TYPE(415), - /** - * A server SHOULD return a response with this status code if a request included a Range request-header field - * (section 14.35), and none of the range-specifier values in this field overlap the current extent of the - * selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this - * means that the first-byte-pos of all of the byte-range-spec values were greater than the current length of - * the selected resource.) - * - *

When this status code is returned for a byte-range request, the response SHOULD include a Content-Range - * entity-header field specifying the current length of the selected resource (see section 14.16). This - * response MUST NOT use the multipart/byteranges content-type. - */ - REQUESTED_RANGE_NOT_SATISFIED(416), - /** - * The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, - * or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the - * next-hop server. - */ - EXPECTATION_FAILED(417), - /** - * The 422 (Unprocessable Entity) status code means the server understands the content type of the request - * entity (hence a 415(Unsupported Media Type) status code is inappropriate), and the syntax of the request - * entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the - * contained instructions. For example, this error condition may occur if an XML request body contains - * well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions. - */ - UNPROCESSABLE_ENTITY(422), - /** - * The 423 (Locked) status code means the source or destination resource of a method is locked. This response - * SHOULD contain an appropriate precondition or postcondition code, such as 'lock-token-submitted' or - * 'no-conflicting-lock'. - */ - LOCKED(423), - /** - * The 424 (Failed Dependency) status code means that the method could not be performed on the resource because - * the requested action depended on another action and that action failed. For example, if a command in a - * PROPPATCH method fails, then, at minimum, the rest of the commands will also fail with 424 (Failed Dependency). - */ - FAILED_DEPENDENCY(424), - /** - * The server encountered an unexpected condition which prevented it from fulfilling the request. - */ - INTERNAL_SERVER_ERROR(500), - /** - * The server does not support the functionality required to fulfill the request. This is the appropriate - * response when the server does not recognize the request method and is not capable of supporting it for any - * resource. - */ - NOT_IMPLEMENTED(501), - /** - * The server, while acting as a gateway or proxy, received an invalid response from the upstream server it - * accessed in attempting to fulfill the request. - */ - BAD_GATEWAY(502), - /** - * The server is currently unable to handle the request due to a temporary overloading or maintenance of the - * server. The implication is that this is a temporary condition which will be alleviated after some delay. - * If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, - * the client SHOULD handle the response as it would for a 500 response. - */ - SERVICE_UNAVAILABLE(503), - /** - * The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server - * specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access - * in attempting to complete the request. - */ - GATEWAY_TIMEOUT(504), - /** - * The server does not support, or refuses to support, the HTTP protocol version that was used in the request - * message. The server is indicating that it is unable or unwilling to complete the request using the same major - * version as the client, as described in section 3.1, other than with this error message. The response SHOULD - * contain an entity describing why that version is not supported and what other protocols are supported by - * that server. - */ - HTTP_VERSION_NOT_SUPPORTED(505), - /** - * The 507 (Insufficient Storage) status code means the method could not be performed on the resource because - * the server is unable to store the representation needed to successfully complete the request. This condition - * is considered to be temporary. If the request that received this status code was the result of a user action, - * the request MUST NOT be repeated until it is requested by a separate user action. - */ - INSUFFICIENT_STORAGE(506); - - - private int status; - - Status(int status) { - this.status = status; - } - - public int getStatus() { - return status; - } - } - /** * Can the content byte[] be used only with this thread (false), or by any thread (true). */ @@ -512,5 +52,5 @@ public interface RestResponse { int suffixContentLength(); - Status status(); + RestStatus status(); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestStatus.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestStatus.java new file mode 100644 index 00000000000..beeb9fa1fa8 --- /dev/null +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/RestStatus.java @@ -0,0 +1,480 @@ +/* + * Licensed to Elastic Search and Shay Banon under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. Elastic Search 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.rest; + +public enum RestStatus { + /** + * The client SHOULD continue with its request. This interim response is used to inform the client that the + * initial part of the request has been received and has not yet been rejected by the server. The client + * SHOULD continue by sending the remainder of the request or, if the request has already been completed, + * ignore this response. The server MUST send a final response after the request has been completed. + */ + CONTINUE(100), + /** + * The server understands and is willing to comply with the client's request, via the Upgrade message header field + * (section 14.42), for a change in the application protocol being used on this connection. The server will + * switch protocols to those defined by the response's Upgrade header field immediately after the empty line + * which terminates the 101 response. + */ + SWITCHING_PROTOCOLS(101), + /** + * The request has succeeded. The information returned with the response is dependent on the method + * used in the request, for example: + *

+ */ + OK(200), + /** + * The request has been fulfilled and resulted in a new resource being created. The newly created resource can + * be referenced by the URI(s) returned in the entity of the response, with the most specific URI for the + * resource given by a Location header field. The response SHOULD include an entity containing a list of resource + * characteristics and location(s) from which the user or user agent can choose the one most appropriate. The + * entity format is specified by the media type given in the Content-Type header field. The origin server MUST + * create the resource before returning the 201 status code. If the action cannot be carried out immediately, the + * server SHOULD respond with 202 (Accepted) response instead. + * + *

A 201 response MAY contain an ETag response header field indicating the current value of the entity tag + * for the requested variant just created, see section 14.19. + */ + CREATED(201), + /** + * The request has been accepted for processing, but the processing has not been completed. The request might + * or might not eventually be acted upon, as it might be disallowed when processing actually takes place. There + * is no facility for re-sending a status code from an asynchronous operation such as this. + * + *

The 202 response is intentionally non-committal. Its purpose is to allow a server to accept a request for + * some other process (perhaps a batch-oriented process that is only run once per day) without requiring that + * the user agent's connection to the server persist until the process is completed. The entity returned with + * this response SHOULD include an indication of the request's current status and either a pointer to a status + * monitor or some estimate of when the user can expect the request to be fulfilled. + */ + ACCEPTED(202), + /** + * The returned meta information in the entity-header is not the definitive set as available from the origin + * server, but is gathered from a local or a third-party copy. The set presented MAY be a subset or super set + * of the original version. For example, including local annotation information about the resource might + * result in a super set of the meta information known by the origin server. Use of this response code + * is not required and is only appropriate when the response would otherwise be 200 (OK). + */ + NON_AUTHORITATIVE_INFORMATION(203), + /** + * The server has fulfilled the request but does not need to return an entity-body, and might want to return + * updated meta information. The response MAY include new or updated meta information in the form of + * entity-headers, which if present SHOULD be associated with the requested variant. + * + *

If the client is a user agent, it SHOULD NOT change its document view from that which caused the request + * to be sent. This response is primarily intended to allow input for actions to take place without causing a + * change to the user agent's active document view, although any new or updated meta information SHOULD be + * applied to the document currently in the user agent's active view. + * + *

The 204 response MUST NOT include a message-body, and thus is always terminated by the first empty + * line after the header fields. + */ + NO_CONTENT(204), + /** + * The server has fulfilled the request and the user agent SHOULD reset the document view which caused the + * request to be sent. This response is primarily intended to allow input for actions to take place via user + * input, followed by a clearing of the form in which the input is given so that the user can easily initiate + * another input action. The response MUST NOT include an entity. + */ + RESET_CONTENT(205), + /** + * The server has fulfilled the partial GET request for the resource. The request MUST have included a Range + * header field (section 14.35) indicating the desired range, and MAY have included an If-Range header + * field (section 14.27) to make the request conditional. + * + *

The response MUST include the following header fields: + *

+ * + *

If the 206 response is the result of an If-Range request that used a strong cache validator + * (see section 13.3.3), the response SHOULD NOT include other entity-headers. If the response is the result + * of an If-Range request that used a weak validator, the response MUST NOT include other entity-headers; + * this prevents inconsistencies between cached entity-bodies and updated headers. Otherwise, the response MUST + * include all of the entity-headers that would have been returned with a 200 (OK) response to the same request. + * + *

A cache MUST NOT combine a 206 response with other previously cached content if the ETag or Last-Modified + * headers do not match exactly, see 13.5.4. + * + *

A cache that does not support the Range and Content-Range headers MUST NOT cache 206 (Partial) responses. + */ + PARTIAL_CONTENT(206), + /** + * The 207 (Multi-Status) status code provides status for multiple independent operations (see Section 13 for + * more information). + * + *

A Multi-Status response conveys information about multiple resources in situations where multiple status + * codes might be appropriate. The default Multi-Status response body is a text/xml or application/xml HTTP + * entity with a 'multistatus' root element. Further elements contain 200, 300, 400, and 500 series status codes + * generated during the method invocation. 100 series status codes SHOULD NOT be recorded in a 'response' + * XML element. + * + *

Although '207' is used as the overall response status code, the recipient needs to consult the contents + * of the multistatus response body for further information about the success or failure of the method execution. + * The response MAY be used in success, partial success and also in failure situations. + * + *

The 'multistatus' root element holds zero or more 'response' elements in any order, each with + * information about an individual resource. Each 'response' element MUST have an 'href' element + * to identify the resource. + */ + MULTI_STATUS(207), + /** + * The requested resource corresponds to any one of a set of representations, each with its own specific + * location, and agent-driven negotiation information (section 12) is being provided so that the user (or user + * agent) can select a preferred representation and redirect its request to that location. + * + *

Unless it was a HEAD request, the response SHOULD include an entity containing a list of resource + * characteristics and location(s) from which the user or user agent can choose the one most appropriate. + * The entity format is specified by the media type given in the Content-Type header field. Depending upon the + * format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed + * automatically. However, this specification does not define any standard for such automatic selection. + * + *

If the server has a preferred choice of representation, it SHOULD include the specific URI for that + * representation in the Location field; user agents MAY use the Location field value for automatic redirection. + * This response is cacheable unless indicated otherwise. + */ + MULTIPLE_CHOICES(300), + /** + * The requested resource has been assigned a new permanent URI and any future references to this resource + * SHOULD use one of the returned URIs. Clients with link editing capabilities ought to automatically re-link + * references to the Request-URI to one or more of the new references returned by the server, where possible. + * This response is cacheable unless indicated otherwise. + * + *

The new permanent URI SHOULD be given by the Location field in the response. Unless the request method + * was HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). + * + *

If the 301 status code is received in response to a request other than GET or HEAD, the user agent + * MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change + * the conditions under which the request was issued. + */ + MOVED_PERMANENTLY(301), + /** + * The requested resource resides temporarily under a different URI. Since the redirection might be altered on + * occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only + * cacheable if indicated by a Cache-Control or Expires header field. + * + *

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was + * HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). + * + *

If the 302 status code is received in response to a request other than GET or HEAD, the user agent + * MUST NOT automatically redirect the request unless it can be confirmed by the user, since this might change + * the conditions under which the request was issued. + */ + FOUND(302), + /** + * The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on + * that resource. This method exists primarily to allow the output of a POST-activated script to redirect the + * user agent to a selected resource. The new URI is not a substitute reference for the originally requested + * resource. The 303 response MUST NOT be cached, but the response to the second (redirected) request might be + * cacheable. + * + *

The different URI SHOULD be given by the Location field in the response. Unless the request method was + * HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s). + */ + SEE_OTHER(303), + /** + * If the client has performed a conditional GET request and access is allowed, but the document has not been + * modified, the server SHOULD respond with this status code. The 304 response MUST NOT contain a message-body, + * and thus is always terminated by the first empty line after the header fields. + * + *

The response MUST include the following header fields: + *

+ * + *

If the conditional GET used a strong cache validator (see section 13.3.3), the response SHOULD NOT include + * other entity-headers. Otherwise (i.e., the conditional GET used a weak validator), the response MUST NOT + * include other entity-headers; this prevents inconsistencies between cached entity-bodies and updated headers. + * + *

If a 304 response indicates an entity not currently cached, then the cache MUST disregard the response + * and repeat the request without the conditional. + * + *

If a cache uses a received 304 response to update a cache entry, the cache MUST update the entry to + * reflect any new field values given in the response. + */ + NOT_MODIFIED(304), + /** + * The requested resource MUST be accessed through the proxy given by the Location field. The Location field + * gives the URI of the proxy. The recipient is expected to repeat this single request via the proxy. + * 305 responses MUST only be generated by origin servers. + */ + USE_PROXY(305), + /** + * The requested resource resides temporarily under a different URI. Since the redirection MAY be altered on + * occasion, the client SHOULD continue to use the Request-URI for future requests. This response is only + * cacheable if indicated by a Cache-Control or Expires header field. + * + *

The temporary URI SHOULD be given by the Location field in the response. Unless the request method was + * HEAD, the entity of the response SHOULD contain a short hypertext note with a hyperlink to the new URI(s) , + * since many pre-HTTP/1.1 user agents do not understand the 307 status. Therefore, the note SHOULD contain + * the information necessary for a user to repeat the original request on the new URI. + * + *

If the 307 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT + * automatically redirect the request unless it can be confirmed by the user, since this might change the + * conditions under which the request was issued. + */ + TEMPORARY_REDIRECT(307), + /** + * The request could not be understood by the server due to malformed syntax. The client SHOULD NOT repeat the + * request without modifications. + */ + BAD_REQUEST(400), + /** + * The request requires user authentication. The response MUST include a WWW-Authenticate header field + * (section 14.47) containing a challenge applicable to the requested resource. The client MAY repeat the request + * with a suitable Authorization header field (section 14.8). If the request already included Authorization + * credentials, then the 401 response indicates that authorization has been refused for those credentials. + * If the 401 response contains the same challenge as the prior response, and the user agent has already attempted + * authentication at least once, then the user SHOULD be presented the entity that was given in the response, + * since that entity might include relevant diagnostic information. HTTP access authentication is explained in + * "HTTP Authentication: Basic and Digest Access Authentication" [43]. + */ + UNAUTHORIZED(401), + /** + * This code is reserved for future use. + */ + PAYMENT_REQUIRED(402), + /** + * The server understood the request, but is refusing to fulfill it. Authorization will not help and the request + * SHOULD NOT be repeated. If the request method was not HEAD and the server wishes to make public why the + * request has not been fulfilled, it SHOULD describe the reason for the refusal in the entity. If the server + * does not wish to make this information available to the client, the status code 404 (Not Found) can be used + * instead. + */ + FORBIDDEN(403), + /** + * The server has not found anything matching the Request-URI. No indication is given of whether the condition + * is temporary or permanent. The 410 (Gone) status code SHOULD be used if the server knows, through some + * internally configurable mechanism, that an old resource is permanently unavailable and has no forwarding + * address. This status code is commonly used when the server does not wish to reveal exactly why the request + * has been refused, or when no other response is applicable. + */ + NOT_FOUND(404), + /** + * The method specified in the Request-Line is not allowed for the resource identified by the Request-URI. + * The response MUST include an Allow header containing a list of valid methods for the requested resource. + */ + METHOD_NOT_ALLOWED(405), + /** + * The resource identified by the request is only capable of generating response entities which have content + * characteristics not acceptable according to the accept headers sent in the request. + * + *

Unless it was a HEAD request, the response SHOULD include an entity containing a list of available entity + * characteristics and location(s) from which the user or user agent can choose the one most appropriate. + * The entity format is specified by the media type given in the Content-Type header field. Depending upon the + * format and the capabilities of the user agent, selection of the most appropriate choice MAY be performed + * automatically. However, this specification does not define any standard for such automatic selection. + * + *

Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept + * headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User + * agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable. + * + *

If the response could be unacceptable, a user agent SHOULD temporarily stop receipt of more data and query + * the user for a decision on further actions. + */ + NOT_ACCEPTABLE(406), + /** + * This code is similar to 401 (Unauthorized), but indicates that the client must first authenticate itself with + * the proxy. The proxy MUST return a Proxy-Authenticate header field (section 14.33) containing a challenge + * applicable to the proxy for the requested resource. The client MAY repeat the request with a suitable + * Proxy-Authorization header field (section 14.34). HTTP access authentication is explained in + * "HTTP Authentication: Basic and Digest Access Authentication" [43]. + */ + PROXY_AUTHENTICATION(407), + /** + * The client did not produce a request within the time that the server was prepared to wait. The client MAY + * repeat the request without modifications at any later time. + */ + REQUEST_TIMEOUT(408), + /** + * The request could not be completed due to a conflict with the current state of the resource. This code is + * only allowed in situations where it is expected that the user might be able to resolve the conflict and + * resubmit the request. The response body SHOULD include enough information for the user to recognize the + * source of the conflict. Ideally, the response entity would include enough information for the user or user + * agent to fix the problem; however, that might not be possible and is not required. + * + *

Conflicts are most likely to occur in response to a PUT request. For example, if versioning were being + * used and the entity being PUT included changes to a resource which conflict with those made by an earlier + * (third-party) request, the server might use the 409 response to indicate that it can't complete the request. + * In this case, the response entity would likely contain a list of the differences between the two versions in + * a format defined by the response Content-Type. + */ + CONFLICT(409), + /** + * The requested resource is no longer available at the server and no forwarding address is known. This condition + * is expected to be considered permanent. Clients with link editing capabilities SHOULD delete references to + * the Request-URI after user approval. If the server does not know, or has no facility to determine, whether or + * not the condition is permanent, the status code 404 (Not Found) SHOULD be used instead. This response is + * cacheable unless indicated otherwise. + * + *

The 410 response is primarily intended to assist the task of web maintenance by notifying the recipient + * that the resource is intentionally unavailable and that the server owners desire that remote links to that + * resource be removed. Such an event is common for limited-time, promotional services and for resources belonging + * to individuals no longer working at the server's site. It is not necessary to mark all permanently unavailable + * resources as "gone" or to keep the mark for any length of time -- that is left to the discretion of the server + * owner. + */ + GONE(410), + /** + * The server refuses to accept the request without a defined Content-Length. The client MAY repeat the request + * if it adds a valid Content-Length header field containing the length of the message-body in the request message. + */ + LENGTH_REQUIRED(411), + /** + * The precondition given in one or more of the request-header fields evaluated to false when it was tested on + * the server. This response code allows the client to place preconditions on the current resource metainformation + * (header field data) and thus prevent the requested method from being applied to a resource other than the one + * intended. + */ + PRECONDITION_FAILED(412), + /** + * The server is refusing to process a request because the request entity is larger than the server is willing + * or able to process. The server MAY close the connection to prevent the client from continuing the request. + * + *

If the condition is temporary, the server SHOULD include a Retry-After header field to indicate that it + * is temporary and after what time the client MAY try again. + */ + REQUEST_ENTITY_TOO_LARGE(413), + /** + * The server is refusing to service the request because the Request-URI is longer than the server is willing + * to interpret. This rare condition is only likely to occur when a client has improperly converted a POST + * request to a GET request with long query information, when the client has descended into a URI "black hole" + * of redirection (e.g., a redirected URI prefix that points to a suffix of itself), or when the server is + * under attack by a client attempting to exploit security holes present in some servers using fixed-length + * buffers for reading or manipulating the Request-URI. + */ + REQUEST_URI_TOO_LONG(414), + /** + * The server is refusing to service the request because the entity of the request is in a format not supported + * by the requested resource for the requested method. + */ + UNSUPPORTED_MEDIA_TYPE(415), + /** + * A server SHOULD return a response with this status code if a request included a Range request-header field + * (section 14.35), and none of the range-specifier values in this field overlap the current extent of the + * selected resource, and the request did not include an If-Range request-header field. (For byte-ranges, this + * means that the first-byte-pos of all of the byte-range-spec values were greater than the current length of + * the selected resource.) + * + *

When this status code is returned for a byte-range request, the response SHOULD include a Content-Range + * entity-header field specifying the current length of the selected resource (see section 14.16). This + * response MUST NOT use the multipart/byteranges content-type. + */ + REQUESTED_RANGE_NOT_SATISFIED(416), + /** + * The expectation given in an Expect request-header field (see section 14.20) could not be met by this server, + * or, if the server is a proxy, the server has unambiguous evidence that the request could not be met by the + * next-hop server. + */ + EXPECTATION_FAILED(417), + /** + * The 422 (Unprocessable Entity) status code means the server understands the content type of the request + * entity (hence a 415(Unsupported Media Type) status code is inappropriate), and the syntax of the request + * entity is correct (thus a 400 (Bad Request) status code is inappropriate) but was unable to process the + * contained instructions. For example, this error condition may occur if an XML request body contains + * well-formed (i.e., syntactically correct), but semantically erroneous, XML instructions. + */ + UNPROCESSABLE_ENTITY(422), + /** + * The 423 (Locked) status code means the source or destination resource of a method is locked. This response + * SHOULD contain an appropriate precondition or postcondition code, such as 'lock-token-submitted' or + * 'no-conflicting-lock'. + */ + LOCKED(423), + /** + * The 424 (Failed Dependency) status code means that the method could not be performed on the resource because + * the requested action depended on another action and that action failed. For example, if a command in a + * PROPPATCH method fails, then, at minimum, the rest of the commands will also fail with 424 (Failed Dependency). + */ + FAILED_DEPENDENCY(424), + /** + * The server encountered an unexpected condition which prevented it from fulfilling the request. + */ + INTERNAL_SERVER_ERROR(500), + /** + * The server does not support the functionality required to fulfill the request. This is the appropriate + * response when the server does not recognize the request method and is not capable of supporting it for any + * resource. + */ + NOT_IMPLEMENTED(501), + /** + * The server, while acting as a gateway or proxy, received an invalid response from the upstream server it + * accessed in attempting to fulfill the request. + */ + BAD_GATEWAY(502), + /** + * The server is currently unable to handle the request due to a temporary overloading or maintenance of the + * server. The implication is that this is a temporary condition which will be alleviated after some delay. + * If known, the length of the delay MAY be indicated in a Retry-After header. If no Retry-After is given, + * the client SHOULD handle the response as it would for a 500 response. + */ + SERVICE_UNAVAILABLE(503), + /** + * The server, while acting as a gateway or proxy, did not receive a timely response from the upstream server + * specified by the URI (e.g. HTTP, FTP, LDAP) or some other auxiliary server (e.g. DNS) it needed to access + * in attempting to complete the request. + */ + GATEWAY_TIMEOUT(504), + /** + * The server does not support, or refuses to support, the HTTP protocol version that was used in the request + * message. The server is indicating that it is unable or unwilling to complete the request using the same major + * version as the client, as described in section 3.1, other than with this error message. The response SHOULD + * contain an entity describing why that version is not supported and what other protocols are supported by + * that server. + */ + HTTP_VERSION_NOT_SUPPORTED(505), + /** + * The 507 (Insufficient Storage) status code means the method could not be performed on the resource because + * the server is unable to store the representation needed to successfully complete the request. This condition + * is considered to be temporary. If the request that received this status code was the result of a user action, + * the request MUST NOT be repeated until it is requested by a separate user action. + */ + INSUFFICIENT_STORAGE(506); + + + private int status; + + RestStatus(int status) { + this.status = (short) status; + } + + public int getStatus() { + return status; + } +} \ No newline at end of file diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/StringRestResponse.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/StringRestResponse.java index 60c2ffccd43..ec3cc7a5a32 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/StringRestResponse.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/StringRestResponse.java @@ -33,11 +33,11 @@ public class StringRestResponse extends Utf8RestResponse { } }; - public StringRestResponse(Status status) { + public StringRestResponse(RestStatus status) { super(status); } - public StringRestResponse(Status status, String content) { + public StringRestResponse(RestStatus status, String content) { super(status, convert(content)); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java index a0d178fbcb8..a6e6f8996fd 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/Utf8RestResponse.java @@ -39,7 +39,7 @@ public class Utf8RestResponse extends AbstractRestResponse implements RestRespon EMPTY = temp; } - private final Status status; + private final RestStatus status; private final UnicodeUtil.UTF8Result utf8Result; @@ -47,15 +47,15 @@ public class Utf8RestResponse extends AbstractRestResponse implements RestRespon private final UnicodeUtil.UTF8Result suffixUtf8Result; - public Utf8RestResponse(Status status) { + public Utf8RestResponse(RestStatus status) { this(status, EMPTY); } - public Utf8RestResponse(Status status, UnicodeUtil.UTF8Result utf8Result) { + public Utf8RestResponse(RestStatus status, UnicodeUtil.UTF8Result utf8Result) { this(status, utf8Result, null, null); } - public Utf8RestResponse(Status status, UnicodeUtil.UTF8Result utf8Result, + public Utf8RestResponse(RestStatus status, UnicodeUtil.UTF8Result utf8Result, UnicodeUtil.UTF8Result prefixUtf8Result, UnicodeUtil.UTF8Result suffixUtf8Result) { this.status = status; this.utf8Result = utf8Result; @@ -79,7 +79,7 @@ public class Utf8RestResponse extends AbstractRestResponse implements RestRespon return utf8Result.length; } - @Override public Status status() { + @Override public RestStatus status() { return status; } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentRestResponse.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentRestResponse.java index be4240318ec..24c9cd0f435 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentRestResponse.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentRestResponse.java @@ -47,17 +47,17 @@ public class XContentRestResponse extends AbstractRestResponse { private final UnicodeUtil.UTF8Result prefixUtf8Result; - private final Status status; + private final RestStatus status; private final XContentBuilder builder; - public XContentRestResponse(RestRequest request, Status status) { + public XContentRestResponse(RestRequest request, RestStatus status) { this.builder = null; this.status = status; this.prefixUtf8Result = startJsonp(request); } - public XContentRestResponse(RestRequest request, Status status, XContentBuilder builder) throws IOException { + public XContentRestResponse(RestRequest request, RestStatus status, XContentBuilder builder) throws IOException { this.builder = builder; this.status = status; this.prefixUtf8Result = startJsonp(request); @@ -79,7 +79,7 @@ public class XContentRestResponse extends AbstractRestResponse { return builder.unsafeBytesLength(); } - @Override public Status status() { + @Override public RestStatus status() { return this.status; } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java index e3fc9608315..79c5d87b2b7 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/XContentThrowableRestResponse.java @@ -19,6 +19,7 @@ package org.elasticsearch.rest; +import org.elasticsearch.ElasticSearchException; import org.elasticsearch.common.xcontent.XContentBuilder; import java.io.IOException; @@ -32,16 +33,17 @@ import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; public class XContentThrowableRestResponse extends XContentRestResponse { public XContentThrowableRestResponse(RestRequest request, Throwable t) throws IOException { - this(request, Status.INTERNAL_SERVER_ERROR, t); + this(request, ((t instanceof ElasticSearchException) ? ((ElasticSearchException) t).status() : RestStatus.INTERNAL_SERVER_ERROR), t); } - public XContentThrowableRestResponse(RestRequest request, Status status, Throwable t) throws IOException { - super(request, status, convert(request, t)); + public XContentThrowableRestResponse(RestRequest request, RestStatus status, Throwable t) throws IOException { + super(request, status, convert(request, status, t)); } - private static XContentBuilder convert(RestRequest request, Throwable t) throws IOException { - XContentBuilder builder = restContentBuilder(request) - .startObject().field("error", detailedMessage(t)); + private static XContentBuilder convert(RestRequest request, RestStatus status, Throwable t) throws IOException { + XContentBuilder builder = restContentBuilder(request).startObject() + .field("error", detailedMessage(t)) + .field("status", status.getStatus()); if (t != null && request.paramAsBoolean("error_trace", false)) { builder.startObject("error_trace"); boolean first = true; diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java index 3131a94a8cd..347bfafde6f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/health/RestClusterHealthAction.java @@ -33,7 +33,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.client.Requests.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -169,7 +169,7 @@ public class RestClusterHealthAction extends BaseRestHandler { builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { onFailure(e); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java index a3f42c4571f..36b461dd914 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/info/RestNodesInfoAction.java @@ -110,7 +110,7 @@ public class RestNodesInfoAction extends BaseRestHandler { builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { onFailure(e); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java index e23b1f1871f..1d23c0514d0 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/restart/RestNodesRestartAction.java @@ -66,7 +66,7 @@ public class RestNodesRestartAction extends BaseRestHandler { builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { onFailure(e); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java index 57e2fea06ac..8a851252a01 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/shutdown/RestNodesShutdownAction.java @@ -68,7 +68,7 @@ public class RestNodesShutdownAction extends BaseRestHandler { builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { onFailure(e); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java index 8a3f0448620..25715cf9e4f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/node/stats/RestNodesStatsAction.java @@ -86,7 +86,7 @@ public class RestNodesStatsAction extends BaseRestHandler { builder.endObject(); builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { onFailure(e); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/broadcast/RestBroadcastPingAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/broadcast/RestBroadcastPingAction.java index 76f7c83930f..fa6df2abac3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/broadcast/RestBroadcastPingAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/broadcast/RestBroadcastPingAction.java @@ -33,7 +33,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/replication/RestReplicationPingAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/replication/RestReplicationPingAction.java index ddbe63dd974..d74c00e714f 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/replication/RestReplicationPingAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/replication/RestReplicationPingAction.java @@ -35,7 +35,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (Shay Banon) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/single/RestSinglePingAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/single/RestSinglePingAction.java index 099c0e3a669..7e35fef8f20 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/single/RestSinglePingAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/ping/single/RestSinglePingAction.java @@ -31,7 +31,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (Shay Banon) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java index 43ca153f989..6bd4d2bed03 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/cluster/state/RestClusterStateAction.java @@ -280,7 +280,7 @@ public class RestClusterStateAction extends BaseRestHandler { builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { onFailure(e); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java index 420c92bac82..0ca90923a4c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/alias/RestIndicesAliasesAction.java @@ -35,7 +35,7 @@ import org.elasticsearch.rest.*; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java index 0bb5320f4e3..62439cc860e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/analyze/RestAnalyzeAction.java @@ -32,7 +32,7 @@ import org.elasticsearch.rest.*; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java index 7392d559de5..60bb9e9c5ad 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/cache/clear/RestClearIndicesCacheAction.java @@ -34,7 +34,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/close/RestCloseIndexAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/close/RestCloseIndexAction.java index 0722e262460..c9225a7fbbb 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/close/RestCloseIndexAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/close/RestCloseIndexAction.java @@ -27,15 +27,13 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.indices.IndexMissingException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.common.unit.TimeValue.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -66,13 +64,7 @@ public class RestCloseIndexAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - Throwable t = unwrapCause(e); - if (t instanceof IndexMissingException) { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java index 82792420c75..bfa35f9f27a 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/create/RestCreateIndexAction.java @@ -29,17 +29,14 @@ import org.elasticsearch.common.settings.SettingsException; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.XContentType; -import org.elasticsearch.indices.IndexAlreadyExistsException; -import org.elasticsearch.indices.InvalidIndexNameException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import java.util.Map; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.common.unit.TimeValue.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -118,13 +115,7 @@ public class RestCreateIndexAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - Throwable t = unwrapCause(e); - if (t instanceof IndexAlreadyExistsException || t instanceof InvalidIndexNameException) { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/delete/RestDeleteIndexAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/delete/RestDeleteIndexAction.java index b7e291dbee3..2cc15432526 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/delete/RestDeleteIndexAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/delete/RestDeleteIndexAction.java @@ -27,15 +27,13 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.indices.IndexMissingException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.common.unit.TimeValue.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -66,13 +64,7 @@ public class RestDeleteIndexAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - Throwable t = unwrapCause(e); - if (t instanceof IndexMissingException) { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java index e435b932b6d..0330a5dc813 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/flush/RestFlushAction.java @@ -34,7 +34,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/gateway/snapshot/RestGatewaySnapshotAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/gateway/snapshot/RestGatewaySnapshotAction.java index f663ca22049..97f99c3c4f9 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/gateway/snapshot/RestGatewaySnapshotAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/gateway/snapshot/RestGatewaySnapshotAction.java @@ -33,7 +33,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/delete/RestDeleteMappingAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/delete/RestDeleteMappingAction.java index 85f7d8d3575..7d009afa63e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/delete/RestDeleteMappingAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/delete/RestDeleteMappingAction.java @@ -26,18 +26,14 @@ import org.elasticsearch.client.Client; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.index.mapper.MergeMappingException; -import org.elasticsearch.indices.IndexMissingException; -import org.elasticsearch.indices.InvalidTypeNameException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.client.Requests.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** @@ -69,13 +65,7 @@ public class RestDeleteMappingAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - Throwable t = unwrapCause(e); - if (t instanceof IndexMissingException || t instanceof InvalidTypeNameException || t instanceof MergeMappingException) { - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java index 53b1824c90f..9fb5f200cd9 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/get/RestGetMappingAction.java @@ -41,7 +41,7 @@ import java.util.Map; import java.util.Set; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/put/RestPutMappingAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/put/RestPutMappingAction.java index 0b902784b38..a3732b3cf30 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/put/RestPutMappingAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/mapping/put/RestPutMappingAction.java @@ -26,19 +26,15 @@ import org.elasticsearch.client.Client; import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; -import org.elasticsearch.index.mapper.MergeMappingException; -import org.elasticsearch.indices.IndexMissingException; -import org.elasticsearch.indices.InvalidTypeNameException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.client.Requests.*; import static org.elasticsearch.common.unit.TimeValue.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** @@ -77,13 +73,7 @@ public class RestPutMappingAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - Throwable t = unwrapCause(e); - if (t instanceof IndexMissingException || t instanceof InvalidTypeNameException || t instanceof MergeMappingException) { - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/open/RestOpenIndexAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/open/RestOpenIndexAction.java index 5b0c2e3f76d..be9d55cd8a6 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/open/RestOpenIndexAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/open/RestOpenIndexAction.java @@ -27,15 +27,13 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.indices.IndexMissingException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.common.unit.TimeValue.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -66,13 +64,7 @@ public class RestOpenIndexAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - Throwable t = unwrapCause(e); - if (t instanceof IndexMissingException) { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java index cdbee4c5b32..e51268908f9 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/optimize/RestOptimizeAction.java @@ -34,7 +34,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java index 4137c153cf0..df6ba0f6f6b 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/refresh/RestRefreshAction.java @@ -34,7 +34,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java index 68096c3ca2c..69fdb5b6cd9 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/settings/RestUpdateSettingsAction.java @@ -36,7 +36,7 @@ import java.io.IOException; import java.util.Map; import static org.elasticsearch.client.Requests.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java index 01077c4d803..c65301638a6 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/status/RestIndicesStatusAction.java @@ -34,7 +34,7 @@ import java.io.IOException; import java.util.Map; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/delete/RestDeleteIndexTemplateAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/delete/RestDeleteIndexTemplateAction.java index 5128f4b265e..dd293784e56 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/delete/RestDeleteIndexTemplateAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/delete/RestDeleteIndexTemplateAction.java @@ -27,15 +27,13 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.indices.IndexTemplateMissingException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.common.unit.TimeValue.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -66,13 +64,7 @@ public class RestDeleteIndexTemplateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - Throwable t = unwrapCause(e); - if (t instanceof IndexTemplateMissingException) { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java index c7d68acbe44..a065e61345d 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/get/RestGetIndexTemplateAction.java @@ -40,7 +40,7 @@ import java.io.IOException; import java.util.Map; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java index 3208014a724..becf657ef2c 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/admin/indices/template/put/RestPutIndexTemplateAction.java @@ -29,17 +29,14 @@ import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; import org.elasticsearch.common.xcontent.XContentFactory; import org.elasticsearch.common.xcontent.support.XContentMapValues; -import org.elasticsearch.indices.IndexTemplateAlreadyExistsException; -import org.elasticsearch.indices.InvalidIndexTemplateException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import java.util.Map; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.common.unit.TimeValue.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -115,13 +112,7 @@ public class RestPutIndexTemplateAction extends BaseRestHandler { @Override public void onFailure(Throwable e) { try { - Throwable t = unwrapCause(e); - if (t instanceof IndexTemplateAlreadyExistsException || t instanceof InvalidIndexTemplateException) { - XContentBuilder builder = RestXContentBuilder.restContentBuilder(request); - channel.sendResponse(new XContentRestResponse(request, BAD_REQUEST, builder.startObject().field("error", t.getMessage()).endObject())); - } else { - channel.sendResponse(new XContentThrowableRestResponse(request, e)); - } + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java index bdce5786142..166a7981999 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/bulk/RestBulkAction.java @@ -37,7 +37,7 @@ import org.elasticsearch.rest.*; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java index 0e0abd2860d..26b6754ed72 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/count/RestCountAction.java @@ -35,7 +35,7 @@ import java.io.IOException; import static org.elasticsearch.action.count.CountRequest.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java index fde1eeee706..f4522b5a2d3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/delete/RestDeleteAction.java @@ -29,16 +29,14 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.index.engine.VersionConflictEngineException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestActions; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -82,7 +80,7 @@ public class RestDeleteAction extends BaseRestHandler { .field(Fields._ID, result.id()) .field(Fields._VERSION, result.version()) .endObject(); - RestResponse.Status status = OK; + RestStatus status = OK; if (result.notFound()) { status = NOT_FOUND; } @@ -93,13 +91,8 @@ public class RestDeleteAction extends BaseRestHandler { } @Override public void onFailure(Throwable e) { - Throwable t = unwrapCause(e); - RestResponse.Status status = RestResponse.Status.INTERNAL_SERVER_ERROR; - if (t instanceof VersionConflictEngineException) { - status = RestResponse.Status.CONFLICT; - } try { - channel.sendResponse(new XContentThrowableRestResponse(request, status, e)); + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java index a8b87f9dfd6..c4e7faa82de 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/deletebyquery/RestDeleteByQueryAction.java @@ -37,7 +37,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestActions.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java index b0220f323e8..a2767bc0c3e 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/get/RestGetAction.java @@ -32,7 +32,7 @@ import java.io.IOException; import java.util.regex.Pattern; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java index d43cae088fc..ac7e0a4b884 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/index/RestIndexAction.java @@ -29,17 +29,14 @@ import org.elasticsearch.common.inject.Inject; import org.elasticsearch.common.settings.Settings; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentBuilderString; -import org.elasticsearch.index.engine.DocumentAlreadyExistsEngineException; -import org.elasticsearch.index.engine.VersionConflictEngineException; import org.elasticsearch.rest.*; import org.elasticsearch.rest.action.support.RestActions; import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; -import static org.elasticsearch.ExceptionsHelper.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) @@ -117,22 +114,19 @@ public class RestIndexAction extends BaseRestHandler { builder.endArray(); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, OK, builder)); + RestStatus status = OK; + if (response.version() == 1) { + status = CREATED; + } + channel.sendResponse(new XContentRestResponse(request, status, builder)); } catch (Exception e) { onFailure(e); } } @Override public void onFailure(Throwable e) { - Throwable t = unwrapCause(e); - RestResponse.Status status = RestResponse.Status.INTERNAL_SERVER_ERROR; - if (t instanceof VersionConflictEngineException) { - status = RestResponse.Status.CONFLICT; - } else if (t instanceof DocumentAlreadyExistsEngineException) { - status = RestResponse.Status.CONFLICT; - } try { - channel.sendResponse(new XContentThrowableRestResponse(request, status, e)); + channel.sendResponse(new XContentThrowableRestResponse(request, e)); } catch (IOException e1) { logger.error("Failed to send failure response", e1); } diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java index c0178a47e03..5c454fb94d0 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/main/RestMainAction.java @@ -70,7 +70,7 @@ public class RestMainAction extends BaseRestHandler { @Override public void handleRequest(RestRequest request, RestChannel channel) { try { if (request.method() == RestRequest.Method.HEAD) { - channel.sendResponse(new StringRestResponse(RestResponse.Status.OK)); + channel.sendResponse(new StringRestResponse(RestStatus.OK)); return; } XContentBuilder builder = RestXContentBuilder.restContentBuilder(request).prettyPrint(); @@ -101,7 +101,7 @@ public class RestMainAction extends BaseRestHandler { builder.endObject(); } builder.endObject(); - channel.sendResponse(new XContentRestResponse(request, RestResponse.Status.OK, builder)); + channel.sendResponse(new XContentRestResponse(request, RestStatus.OK, builder)); } catch (Exception e) { try { channel.sendResponse(new XContentThrowableRestResponse(request, e)); diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java index dfac0c56736..bff72607ae3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/mlt/RestMoreLikeThisAction.java @@ -35,7 +35,7 @@ import java.io.IOException; import static org.elasticsearch.client.Requests.*; import static org.elasticsearch.common.unit.TimeValue.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java index 41f67d1b578..a29de1e39b1 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/percolate/RestPercolateAction.java @@ -33,7 +33,7 @@ import org.elasticsearch.rest.action.support.RestXContentBuilder; import java.io.IOException; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java index 9099e91285b..4a03405a399 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchAction.java @@ -41,7 +41,7 @@ import java.util.regex.Pattern; import static org.elasticsearch.common.unit.TimeValue.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java index 9da96445480..82dd0932dc3 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/rest/action/search/RestSearchScrollAction.java @@ -34,7 +34,7 @@ import java.io.IOException; import static org.elasticsearch.common.unit.TimeValue.*; import static org.elasticsearch.rest.RestRequest.Method.*; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; import static org.elasticsearch.rest.action.support.RestXContentBuilder.*; /** diff --git a/modules/elasticsearch/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java b/modules/elasticsearch/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java new file mode 100644 index 00000000000..ee406a8815a --- /dev/null +++ b/modules/elasticsearch/src/test/java/org/elasticsearch/ElasticSearchExceptionTests.java @@ -0,0 +1,47 @@ +/* + * Licensed to Elastic Search and Shay Banon under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. Elastic Search 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; + +import org.elasticsearch.index.Index; +import org.elasticsearch.indices.IndexMissingException; +import org.elasticsearch.rest.RestStatus; +import org.elasticsearch.transport.RemoteTransportException; +import org.testng.annotations.Test; + +import static org.hamcrest.MatcherAssert.*; +import static org.hamcrest.Matchers.*; + +@Test +public class ElasticSearchExceptionTests { + + @Test public void testStatus() { + ElasticSearchException exception = new ElasticSearchException("test"); + assertThat(exception.status(), equalTo(RestStatus.INTERNAL_SERVER_ERROR)); + + exception = new ElasticSearchException("test", new RuntimeException()); + assertThat(exception.status(), equalTo(RestStatus.INTERNAL_SERVER_ERROR)); + + exception = new ElasticSearchException("test", new IndexMissingException(new Index("test"))); + assertThat(exception.status(), equalTo(RestStatus.INTERNAL_SERVER_ERROR)); + + exception = new RemoteTransportException("test", new IndexMissingException(new Index("test"))); + assertThat(exception.status(), equalTo(RestStatus.NOT_FOUND)); + } +} \ No newline at end of file diff --git a/plugins/transport/memcached/src/main/java/org/elasticsearch/memcached/netty/MemcachedDispatcher.java b/plugins/transport/memcached/src/main/java/org/elasticsearch/memcached/netty/MemcachedDispatcher.java index 96a5632a3bd..4e130113428 100644 --- a/plugins/transport/memcached/src/main/java/org/elasticsearch/memcached/netty/MemcachedDispatcher.java +++ b/plugins/transport/memcached/src/main/java/org/elasticsearch/memcached/netty/MemcachedDispatcher.java @@ -26,7 +26,7 @@ import org.elasticsearch.memcached.MemcachedRestRequest; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.StringRestResponse; -import static org.elasticsearch.rest.RestResponse.Status.*; +import static org.elasticsearch.rest.RestStatus.*; /** * @author kimchy (shay.banon) diff --git a/plugins/transport/thrift/src/main/java/org/elasticsearch/thrift/ThriftRestImpl.java b/plugins/transport/thrift/src/main/java/org/elasticsearch/thrift/ThriftRestImpl.java index a4afd9e1fbd..45431c138e4 100644 --- a/plugins/transport/thrift/src/main/java/org/elasticsearch/thrift/ThriftRestImpl.java +++ b/plugins/transport/thrift/src/main/java/org/elasticsearch/thrift/ThriftRestImpl.java @@ -26,6 +26,7 @@ import org.elasticsearch.common.settings.Settings; import org.elasticsearch.rest.RestChannel; import org.elasticsearch.rest.RestController; import org.elasticsearch.rest.RestResponse; +import org.elasticsearch.rest.RestStatus; import java.io.IOException; import java.nio.ByteBuffer; @@ -83,7 +84,7 @@ public class ThriftRestImpl extends AbstractComponent implements Rest.Iface { return tResponse; } - private Status getStatus(RestResponse.Status status) { + private Status getStatus(RestStatus status) { switch (status) { case CONTINUE: return Status.CONT;