org.eclipse.jetty.http.HttpStatus Maven / Gradle / Ivy
//
// ========================================================================
// Copyright (c) 1995-2013 Mort Bay Consulting Pty. Ltd.
// ------------------------------------------------------------------------
// All rights reserved. This program and the accompanying materials
// are made available under the terms of the Eclipse Public License v1.0
// and Apache License v2.0 which accompanies this distribution.
//
// The Eclipse Public License is available at
// http://www.eclipse.org/legal/epl-v10.html
//
// The Apache License v2.0 is available at
// http://www.opensource.org/licenses/apache2.0.php
//
// You may elect to redistribute this code under either of these licenses.
// ========================================================================
//
package org.eclipse.jetty.http;
/**
*
* HttpStatusCode enum class, for status codes based on various HTTP RFCs. (see
* table below)
*
*
*
*
* Enum
* Code
* Message
*
* RFC 1945 - HTTP/1.0
*
* RFC 2616 - HTTP/1.1
*
* RFC 2518 - WEBDAV
*
*
*
* Informational - 1xx
* {@link #isInformational(int)}
*
*
*
* {@link #CONTINUE_100}
* 100
* Continue
*
*
* Sec. 10.1.1
*
*
*
* {@link #SWITCHING_PROTOCOLS_101}
* 101
* Switching Protocols
*
*
* Sec. 10.1.2
*
*
*
* {@link #PROCESSING_102}
* 102
* Processing
*
*
*
* Sec. 10.1
*
*
*
* Success - 2xx
* {@link #isSuccess(int)}
*
*
*
* {@link #OK_200}
* 200
* OK
*
* Sec. 9.2
*
* Sec. 10.2.1
*
*
*
* {@link #CREATED_201}
* 201
* Created
*
* Sec. 9.2
*
* Sec. 10.2.2
*
*
*
* {@link #ACCEPTED_202}
* 202
* Accepted
*
* Sec. 9.2
*
* Sec. 10.2.3
*
*
*
* {@link #NON_AUTHORITATIVE_INFORMATION_203}
* 203
* Non Authoritative Information
*
*
* Sec. 10.2.4
*
*
*
* {@link #NO_CONTENT_204}
* 204
* No Content
*
* Sec. 9.2
*
* Sec. 10.2.5
*
*
*
* {@link #RESET_CONTENT_205}
* 205
* Reset Content
*
*
* Sec. 10.2.6
*
*
*
* {@link #PARTIAL_CONTENT_206}
* 206
* Partial Content
*
*
* Sec. 10.2.7
*
*
*
* {@link #MULTI_STATUS_207}
* 207
* Multi-Status
*
*
*
* Sec. 10.2
*
*
*
* 207
* Partial Update OK
*
*
* draft/01
*
*
*
*
* Redirection - 3xx
* {@link #isRedirection(int)}
*
*
*
* {@link #MULTIPLE_CHOICES_300}
* 300
* Multiple Choices
*
* Sec. 9.3
*
* Sec. 10.3.1
*
*
*
* {@link #MOVED_PERMANENTLY_301}
* 301
* Moved Permanently
*
* Sec. 9.3
*
* Sec. 10.3.2
*
*
*
* {@link #MOVED_TEMPORARILY_302}
* 302
* Moved Temporarily
*
* Sec. 9.3
* (now "302 Found
")
*
*
*
* {@link #FOUND_302}
* 302
* Found
* (was "302 Moved Temporarily
")
*
* Sec. 10.3.3
*
*
*
* {@link #SEE_OTHER_303}
* 303
* See Other
*
*
* Sec. 10.3.4
*
*
*
* {@link #NOT_MODIFIED_304}
* 304
* Not Modified
*
* Sec. 9.3
*
* Sec. 10.3.5
*
*
*
* {@link #USE_PROXY_305}
* 305
* Use Proxy
*
*
* Sec. 10.3.6
*
*
*
*
* 306
* (Unused)
*
*
* Sec. 10.3.7
*
*
*
* {@link #TEMPORARY_REDIRECT_307}
* 307
* Temporary Redirect
*
*
* Sec. 10.3.8
*
*
*
*
* Client Error - 4xx
* {@link #isClientError(int)}
*
*
*
* {@link #BAD_REQUEST_400}
* 400
* Bad Request
*
* Sec. 9.4
*
* Sec. 10.4.1
*
*
*
* {@link #UNAUTHORIZED_401}
* 401
* Unauthorized
*
* Sec. 9.4
*
* Sec. 10.4.2
*
*
*
* {@link #PAYMENT_REQUIRED_402}
* 402
* Payment Required
*
* Sec. 9.4
*
* Sec. 10.4.3
*
*
*
* {@link #FORBIDDEN_403}
* 403
* Forbidden
*
* Sec. 9.4
*
* Sec. 10.4.4
*
*
*
* {@link #NOT_FOUND_404}
* 404
* Not Found
*
* Sec. 9.4
*
* Sec. 10.4.5
*
*
*
* {@link #METHOD_NOT_ALLOWED_405}
* 405
* Method Not Allowed
*
*
* Sec. 10.4.6
*
*
*
* {@link #NOT_ACCEPTABLE_406}
* 406
* Not Acceptable
*
*
* Sec. 10.4.7
*
*
*
* {@link #PROXY_AUTHENTICATION_REQUIRED_407}
* 407
* Proxy Authentication Required
*
*
* Sec. 10.4.8
*
*
*
* {@link #REQUEST_TIMEOUT_408}
* 408
* Request Timeout
*
*
* Sec. 10.4.9
*
*
*
* {@link #CONFLICT_409}
* 409
* Conflict
*
*
* Sec. 10.4.10
*
*
*
*
* {@link #GONE_410}
* 410
* Gone
*
*
* Sec. 10.4.11
*
*
*
*
* {@link #LENGTH_REQUIRED_411}
* 411
* Length Required
*
*
* Sec. 10.4.12
*
*
*
*
* {@link #PRECONDITION_FAILED_412}
* 412
* Precondition Failed
*
*
* Sec. 10.4.13
*
*
*
*
* {@link #REQUEST_ENTITY_TOO_LARGE_413}
* 413
* Request Entity Too Large
*
*
* Sec. 10.4.14
*
*
*
*
* {@link #REQUEST_URI_TOO_LONG_414}
* 414
* Request-URI Too Long
*
*
* Sec. 10.4.15
*
*
*
*
* {@link #UNSUPPORTED_MEDIA_TYPE_415}
* 415
* Unsupported Media Type
*
*
* Sec. 10.4.16
*
*
*
*
* {@link #REQUESTED_RANGE_NOT_SATISFIABLE_416}
* 416
* Requested Range Not Satisfiable
*
*
* Sec. 10.4.17
*
*
*
*
* {@link #EXPECTATION_FAILED_417}
* 417
* Expectation Failed
*
*
* Sec. 10.4.18
*
*
*
*
*
* 418
* Reauthentication Required
*
*
* draft/01
*
*
*
*
* 418
* Unprocessable Entity
*
*
*
* draft/05
*
*
*
* 419
* Proxy Reauthentication Required
*
*
* draft/01
*
*
*
*
* 419
* Insufficient Space on Resource
*
*
*
* draft/05
*
*
*
* 420
* Method Failure
*
*
*
* draft/05
*
*
*
* 421
* (Unused)
*
*
*
*
*
* {@link #UNPROCESSABLE_ENTITY_422}
* 422
* Unprocessable Entity
*
*
*
* Sec. 10.3
*
*
* {@link #LOCKED_423}
* 423
* Locked
*
*
*
* Sec. 10.4
*
*
* {@link #FAILED_DEPENDENCY_424}
* 424
* Failed Dependency
*
*
*
* Sec. 10.5
*
*
*
* Server Error - 5xx
* {@link #isServerError(int)}
*
*
*
* {@link #INTERNAL_SERVER_ERROR_500}
* 500
* Internal Server Error
*
* Sec. 9.5
*
* Sec. 10.5.1
*
*
*
* {@link #NOT_IMPLEMENTED_501}
* 501
* Not Implemented
*
* Sec. 9.5
*
* Sec. 10.5.2
*
*
*
* {@link #BAD_GATEWAY_502}
* 502
* Bad Gateway
*
* Sec. 9.5
*
* Sec. 10.5.3
*
*
*
* {@link #SERVICE_UNAVAILABLE_503}
* 503
* Service Unavailable
*
* Sec. 9.5
*
* Sec. 10.5.4
*
*
*
* {@link #GATEWAY_TIMEOUT_504}
* 504
* Gateway Timeout
*
*
* Sec. 10.5.5
*
*
*
* {@link #HTTP_VERSION_NOT_SUPPORTED_505}
* 505
* HTTP Version Not Supported
*
*
* Sec. 10.5.6
*
*
*
*
* 506
* (Unused)
*
*
*
*
*
* {@link #INSUFFICIENT_STORAGE_507}
* 507
* Insufficient Storage
*
*
*
* Sec. 10.6
*
*
*
*
* @version $Id$
*/
public class HttpStatus
{
public final static int NOT_SET_000 = 0;
public final static int CONTINUE_100 = 100;
public final static int SWITCHING_PROTOCOLS_101 = 101;
public final static int PROCESSING_102 = 102;
public final static int OK_200 = 200;
public final static int CREATED_201 = 201;
public final static int ACCEPTED_202 = 202;
public final static int NON_AUTHORITATIVE_INFORMATION_203 = 203;
public final static int NO_CONTENT_204 = 204;
public final static int RESET_CONTENT_205 = 205;
public final static int PARTIAL_CONTENT_206 = 206;
public final static int MULTI_STATUS_207 = 207;
public final static int MULTIPLE_CHOICES_300 = 300;
public final static int MOVED_PERMANENTLY_301 = 301;
public final static int MOVED_TEMPORARILY_302 = 302;
public final static int FOUND_302 = 302;
public final static int SEE_OTHER_303 = 303;
public final static int NOT_MODIFIED_304 = 304;
public final static int USE_PROXY_305 = 305;
public final static int TEMPORARY_REDIRECT_307 = 307;
public final static int BAD_REQUEST_400 = 400;
public final static int UNAUTHORIZED_401 = 401;
public final static int PAYMENT_REQUIRED_402 = 402;
public final static int FORBIDDEN_403 = 403;
public final static int NOT_FOUND_404 = 404;
public final static int METHOD_NOT_ALLOWED_405 = 405;
public final static int NOT_ACCEPTABLE_406 = 406;
public final static int PROXY_AUTHENTICATION_REQUIRED_407 = 407;
public final static int REQUEST_TIMEOUT_408 = 408;
public final static int CONFLICT_409 = 409;
public final static int GONE_410 = 410;
public final static int LENGTH_REQUIRED_411 = 411;
public final static int PRECONDITION_FAILED_412 = 412;
public final static int REQUEST_ENTITY_TOO_LARGE_413 = 413;
public final static int REQUEST_URI_TOO_LONG_414 = 414;
public final static int UNSUPPORTED_MEDIA_TYPE_415 = 415;
public final static int REQUESTED_RANGE_NOT_SATISFIABLE_416 = 416;
public final static int EXPECTATION_FAILED_417 = 417;
public final static int UNPROCESSABLE_ENTITY_422 = 422;
public final static int LOCKED_423 = 423;
public final static int FAILED_DEPENDENCY_424 = 424;
public final static int INTERNAL_SERVER_ERROR_500 = 500;
public final static int NOT_IMPLEMENTED_501 = 501;
public final static int BAD_GATEWAY_502 = 502;
public final static int SERVICE_UNAVAILABLE_503 = 503;
public final static int GATEWAY_TIMEOUT_504 = 504;
public final static int HTTP_VERSION_NOT_SUPPORTED_505 = 505;
public final static int INSUFFICIENT_STORAGE_507 = 507;
public static final int MAX_CODE = 507;
private static final Code[] codeMap = new Code[MAX_CODE+1];
static
{
for (Code code : Code.values())
{
codeMap[code._code] = code;
}
}
public enum Code
{
/*
* --------------------------------------------------------------------
* Informational messages in 1xx series. As defined by ... RFC 1945 -
* HTTP/1.0 RFC 2616 - HTTP/1.1 RFC 2518 - WebDAV
*/
/** 100 Continue
*/
CONTINUE(CONTINUE_100, "Continue"),
/** 101 Switching Protocols
*/
SWITCHING_PROTOCOLS(SWITCHING_PROTOCOLS_101, "Switching Protocols"),
/** 102 Processing
*/
PROCESSING(PROCESSING_102, "Processing"),
/*
* --------------------------------------------------------------------
* Success messages in 2xx series. As defined by ... RFC 1945 - HTTP/1.0
* RFC 2616 - HTTP/1.1 RFC 2518 - WebDAV
*/
/** 200 OK
*/
OK(OK_200, "OK"),
/** 201 Created
*/
CREATED(CREATED_201, "Created"),
/** 202 Accepted
*/
ACCEPTED(ACCEPTED_202, "Accepted"),
/** 203 Non Authoritative Information
*/
NON_AUTHORITATIVE_INFORMATION(NON_AUTHORITATIVE_INFORMATION_203, "Non Authoritative Information"),
/** 204 No Content
*/
NO_CONTENT(NO_CONTENT_204, "No Content"),
/** 205 Reset Content
*/
RESET_CONTENT(RESET_CONTENT_205, "Reset Content"),
/** 206 Partial Content
*/
PARTIAL_CONTENT(PARTIAL_CONTENT_206, "Partial Content"),
/** 207 Multi-Status
*/
MULTI_STATUS(MULTI_STATUS_207, "Multi-Status"),
/*
* --------------------------------------------------------------------
* Redirection messages in 3xx series. As defined by ... RFC 1945 -
* HTTP/1.0 RFC 2616 - HTTP/1.1
*/
/** 300 Mutliple Choices
*/
MULTIPLE_CHOICES(MULTIPLE_CHOICES_300, "Multiple Choices"),
/** 301 Moved Permanently
*/
MOVED_PERMANENTLY(MOVED_PERMANENTLY_301, "Moved Permanently"),
/** 302 Moved Temporarily
*/
MOVED_TEMPORARILY(MOVED_TEMPORARILY_302, "Moved Temporarily"),
/** 302 Found
*/
FOUND(FOUND_302, "Found"),
/** 303 See Other
*/
SEE_OTHER(SEE_OTHER_303, "See Other"),
/** 304 Not Modified
*/
NOT_MODIFIED(NOT_MODIFIED_304, "Not Modified"),
/** 305 Use Proxy
*/
USE_PROXY(USE_PROXY_305, "Use Proxy"),
/** 307 Temporary Redirect
*/
TEMPORARY_REDIRECT(TEMPORARY_REDIRECT_307, "Temporary Redirect"),
/*
* --------------------------------------------------------------------
* Client Error messages in 4xx series. As defined by ... RFC 1945 -
* HTTP/1.0 RFC 2616 - HTTP/1.1 RFC 2518 - WebDAV
*/
/** 400 Bad Request
*/
BAD_REQUEST(BAD_REQUEST_400, "Bad Request"),
/** 401 Unauthorized
*/
UNAUTHORIZED(UNAUTHORIZED_401, "Unauthorized"),
/** 402 Payment Required
*/
PAYMENT_REQUIRED(PAYMENT_REQUIRED_402, "Payment Required"),
/** 403 Forbidden
*/
FORBIDDEN(FORBIDDEN_403, "Forbidden"),
/** 404 Not Found
*/
NOT_FOUND(NOT_FOUND_404, "Not Found"),
/** 405 Method Not Allowed
*/
METHOD_NOT_ALLOWED(METHOD_NOT_ALLOWED_405, "Method Not Allowed"),
/** 406 Not Acceptable
*/
NOT_ACCEPTABLE(NOT_ACCEPTABLE_406, "Not Acceptable"),
/** 407 Proxy Authentication Required
*/
PROXY_AUTHENTICATION_REQUIRED(PROXY_AUTHENTICATION_REQUIRED_407, "Proxy Authentication Required"),
/** 408 Request Timeout
*/
REQUEST_TIMEOUT(REQUEST_TIMEOUT_408, "Request Timeout"),
/** 409 Conflict
*/
CONFLICT(CONFLICT_409, "Conflict"),
/** 410 Gone
*/
GONE(GONE_410, "Gone"),
/** 411 Length Required
*/
LENGTH_REQUIRED(LENGTH_REQUIRED_411, "Length Required"),
/** 412 Precondition Failed
*/
PRECONDITION_FAILED(PRECONDITION_FAILED_412, "Precondition Failed"),
/** 413 Request Entity Too Large
*/
REQUEST_ENTITY_TOO_LARGE(REQUEST_ENTITY_TOO_LARGE_413, "Request Entity Too Large"),
/** 414 Request-URI Too Long
*/
REQUEST_URI_TOO_LONG(REQUEST_URI_TOO_LONG_414, "Request-URI Too Long"),
/** 415 Unsupported Media Type
*/
UNSUPPORTED_MEDIA_TYPE(UNSUPPORTED_MEDIA_TYPE_415, "Unsupported Media Type"),
/** 416 Requested Range Not Satisfiable
*/
REQUESTED_RANGE_NOT_SATISFIABLE(REQUESTED_RANGE_NOT_SATISFIABLE_416, "Requested Range Not Satisfiable"),
/** 417 Expectation Failed
*/
EXPECTATION_FAILED(EXPECTATION_FAILED_417, "Expectation Failed"),
/** 422 Unprocessable Entity
*/
UNPROCESSABLE_ENTITY(UNPROCESSABLE_ENTITY_422, "Unprocessable Entity"),
/** 423 Locked
*/
LOCKED(LOCKED_423, "Locked"),
/** 424 Failed Dependency
*/
FAILED_DEPENDENCY(FAILED_DEPENDENCY_424, "Failed Dependency"),
/*
* --------------------------------------------------------------------
* Server Error messages in 5xx series. As defined by ... RFC 1945 -
* HTTP/1.0 RFC 2616 - HTTP/1.1 RFC 2518 - WebDAV
*/
/** 500 Server Error
*/
INTERNAL_SERVER_ERROR(INTERNAL_SERVER_ERROR_500, "Server Error"),
/** 501 Not Implemented
*/
NOT_IMPLEMENTED(NOT_IMPLEMENTED_501, "Not Implemented"),
/** 502 Bad Gateway
*/
BAD_GATEWAY(BAD_GATEWAY_502, "Bad Gateway"),
/** 503 Service Unavailable
*/
SERVICE_UNAVAILABLE(SERVICE_UNAVAILABLE_503, "Service Unavailable"),
/** 504 Gateway Timeout
*/
GATEWAY_TIMEOUT(GATEWAY_TIMEOUT_504, "Gateway Timeout"),
/** 505 HTTP Version Not Supported
*/
HTTP_VERSION_NOT_SUPPORTED(HTTP_VERSION_NOT_SUPPORTED_505, "HTTP Version Not Supported"),
/** 507 Insufficient Storage
*/
INSUFFICIENT_STORAGE(INSUFFICIENT_STORAGE_507, "Insufficient Storage");
private final int _code;
private final String _message;
private Code(int code, String message)
{
this._code = code;
_message=message;
}
public int getCode()
{
return _code;
}
public String getMessage()
{
return _message;
}
public boolean equals(int code)
{
return (this._code == code);
}
@Override
public String toString()
{
return String.format("[%03d %s]",this._code,this.getMessage());
}
/**
* Simple test against an code to determine if it falls into the
* Informational
message category as defined in the RFC 1945 - HTTP/1.0,
* and RFC 2616 -
* HTTP/1.1.
*
* @return true if within range of codes that belongs to
* Informational
messages.
*/
public boolean isInformational()
{
return HttpStatus.isInformational(this._code);
}
/**
* Simple test against an code to determine if it falls into the
* Success
message category as defined in the RFC 1945 - HTTP/1.0,
* and RFC 2616 -
* HTTP/1.1.
*
* @return true if within range of codes that belongs to
* Success
messages.
*/
public boolean isSuccess()
{
return HttpStatus.isSuccess(this._code);
}
/**
* Simple test against an code to determine if it falls into the
* Redirection
message category as defined in the RFC 1945 - HTTP/1.0,
* and RFC 2616 -
* HTTP/1.1.
*
* @return true if within range of codes that belongs to
* Redirection
messages.
*/
public boolean isRedirection()
{
return HttpStatus.isRedirection(this._code);
}
/**
* Simple test against an code to determine if it falls into the
* Client Error
message category as defined in the RFC 1945 - HTTP/1.0,
* and RFC 2616 -
* HTTP/1.1.
*
* @return true if within range of codes that belongs to
* Client Error
messages.
*/
public boolean isClientError()
{
return HttpStatus.isClientError(this._code);
}
/**
* Simple test against an code to determine if it falls into the
* Server Error
message category as defined in the RFC 1945 - HTTP/1.0,
* and RFC 2616 -
* HTTP/1.1.
*
* @return true if within range of codes that belongs to
* Server Error
messages.
*/
public boolean isServerError()
{
return HttpStatus.isServerError(this._code);
}
}
/**
* Get the HttpStatusCode for a specific code
*
* @param code
* the code to lookup.
* @return the {@link HttpStatus} if found, or null if not found.
*/
public static Code getCode(int code)
{
if (code <= MAX_CODE)
{
return codeMap[code];
}
return null;
}
/**
* Get the status message for a specific code.
*
* @param code
* the code to look up
* @return the specific message, or the code number itself if code
* does not match known list.
*/
public static String getMessage(int code)
{
Code codeEnum = getCode(code);
if (codeEnum != null)
{
return codeEnum.getMessage();
}
else
{
return Integer.toString(code);
}
}
/**
* Simple test against an code to determine if it falls into the
* Informational
message category as defined in the RFC 1945 - HTTP/1.0, and RFC 2616 - HTTP/1.1.
*
* @param code
* the code to test.
* @return true if within range of codes that belongs to
* Informational
messages.
*/
public static boolean isInformational(int code)
{
return ((100 <= code) && (code <= 199));
}
/**
* Simple test against an code to determine if it falls into the
* Success
message category as defined in the RFC 1945 - HTTP/1.0, and RFC 2616 - HTTP/1.1.
*
* @param code
* the code to test.
* @return true if within range of codes that belongs to
* Success
messages.
*/
public static boolean isSuccess(int code)
{
return ((200 <= code) && (code <= 299));
}
/**
* Simple test against an code to determine if it falls into the
* Redirection
message category as defined in the RFC 1945 - HTTP/1.0, and RFC 2616 - HTTP/1.1.
*
* @param code
* the code to test.
* @return true if within range of codes that belongs to
* Redirection
messages.
*/
public static boolean isRedirection(int code)
{
return ((300 <= code) && (code <= 399));
}
/**
* Simple test against an code to determine if it falls into the
* Client Error
message category as defined in the RFC 1945 - HTTP/1.0, and RFC 2616 - HTTP/1.1.
*
* @param code
* the code to test.
* @return true if within range of codes that belongs to
* Client Error
messages.
*/
public static boolean isClientError(int code)
{
return ((400 <= code) && (code <= 499));
}
/**
* Simple test against an code to determine if it falls into the
* Server Error
message category as defined in the RFC 1945 - HTTP/1.0, and RFC 2616 - HTTP/1.1.
*
* @param code
* the code to test.
* @return true if within range of codes that belongs to
* Server Error
messages.
*/
public static boolean isServerError(int code)
{
return ((500 <= code) && (code <= 599));
}
}