package uws; /* * This file is part of UWSLibrary. * * UWSLibrary is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * UWSLibrary is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with UWSLibrary. If not, see <http://www.gnu.org/licenses/>. * * Copyright 2012,2014 - UDS/Centre de DonnĂ©es astronomiques de Strasbourg (CDS), * Astronomisches Rechen Institut (ARI) */ import uws.job.ErrorType; /** * <p>Any exception returned by a class of the UWS pattern may be associated with * an HTTP error code (like: 404, 303, 500) and a UWS error type.</p> * * <p> * Any error reported with this kind of exception will (in the most of cases) interrupt a UWS action, * by reporting an error related with the UWS usage. * </p> * * @author Grégory Mantelet (CDS;ARI) * @version 4.1 (09/2014) */ public class UWSException extends Exception { private static final long serialVersionUID = 1L; // SUCCESS codes: public final static int OK = 200; public final static int ACCEPTED_BUT_NOT_COMPLETE = 202; public final static int NO_CONTENT = 204; // REDIRECTION codes: public final static int SEE_OTHER = 303; // CLIENT ERROR codes: public final static int BAD_REQUEST = 400; public final static int FORBIDDEN = 403; public final static int NOT_FOUND = 404; public final static int NOT_ALLOWED = 405; public final static int REQUEST_ENTITY_TOO_LARGE = 413; // SERVER ERROR codes: public final static int INTERNAL_SERVER_ERROR = 500; public final static int NOT_IMPLEMENTED = 501; public final static int SERVICE_UNAVAILABLE = 503; public final static int USER_ACCESS_DENIED = 530; public final static int PERMISSION_DENIED = 550; /** The HTTP error code <i>(by default {@link UWSException#NOT_FOUND NOT_FOUND})</i>. It MUST BE greater than 0. */ protected int httpErrorCode = NOT_FOUND; /** The UWS error type <i>(by default {@link ErrorType#FATAL FATAL})</i>. It MUST BE non <i>null</i>. */ protected ErrorType errorType = ErrorType.FATAL; /* ************ */ /* CONSTRUCTORS */ /* ************ */ /** * Exception in the general context of UWS. * * @param msg Error message to display. */ public UWSException(String msg){ this(msg, null); } /** * Exception that occurs in the general context of UWS, and with the specified error type (FATAL or TRANSIENT). * * @param msg Error message to display. * @param type Type of the error (FATAL or TRANSIENT). <i>Note: If NULL, it will be considered as FATAL.</i> */ public UWSException(String msg, ErrorType type){ super(msg); this.errorType = (type == null) ? ErrorType.FATAL : type; } /** * Exception that occurs in the general context of UWS because the given exception has been thrown. * * @param t The thrown (and so caught) exception. */ public UWSException(Throwable t){ this(t, null); } /** * Exception with the given type that occurs in the general context of UWS * because the given exception has been thrown. * * @param t The thrown (and so caught) exception. * @param type Type of the error (FATAL or TRANSIENT). <i>Note: If NULL, it will be considered as FATAL.</i> */ public UWSException(Throwable t, ErrorType type){ super(t); this.errorType = (type == null) ? ErrorType.FATAL : type; } /** * Exception that occurs in the general context of UWS and which should return the given HTTP error code. * * @param httpError HTTP error code to return. * @param msg Error message to display. */ public UWSException(int httpError, String msg){ this(httpError, msg, null); } /** * Exception that occurs in the general context of UWS, with the given type and which should return the given HTTP error code. * * @param httpError HTTP error code to return. * @param msg Error message to display. * @param type Type of the error (FATAL or TRANSIENT). <i>Note: If NULL, it will be considered as FATAL.</i> */ public UWSException(int httpError, String msg, ErrorType type){ this(msg, type); this.httpErrorCode = (httpError < 0) ? NOT_FOUND : httpError; } /** * Exception that occurs in the general context of UWS, * because the given exception has been thrown and that which should return the given HTTP error status. * * @param httpError HTTP error code to return. * @param t The thrown (and so caught) exception. */ public UWSException(int httpError, Throwable t){ this(httpError, t, (t != null) ? t.getMessage() : null, null); } /** * Exception that occurs in the general context of UWS with the given error type, * because the given exception has been thrown and that which should return the given HTTP error status. * * @param httpError HTTP error code to return. * @param t The thrown (and so caught) exception. * @param type Type of the error (FATAL or TRANSIENT). <i>Note: If NULL, it will be considered as FATAL.</i> */ public UWSException(int httpError, Throwable t, ErrorType type){ this(httpError, t, (t != null) ? t.getMessage() : null, type); } /** * Exception that occurs in the general context of UWS, * because the given exception has been thrown and that which should return the given HTTP error status. * * @param httpError HTTP error code to return. * @param t The thrown (and so caught) exception. * @param msg Error message to display. */ public UWSException(int httpError, Throwable t, String msg){ this(httpError, t, msg, null); } /** * Exception that occurs in the general context of UWS, * because the given exception has been thrown and that which should return the given HTTP error status. * * @param httpError HTTP error code to return. * @param t The thrown (and so caught) exception. * @param msg Error message to display. * @param type Type of the error (FATAL or TRANSIENT). <i>Note: If NULL, it will be considered as FATAL.</i> */ public UWSException(int httpError, Throwable t, String msg, ErrorType type){ super(msg, t); this.httpErrorCode = (httpError < 0) ? NOT_FOUND : httpError; this.errorType = (type == null) ? ErrorType.FATAL : type; } /* ******* */ /* GETTERS */ /* ******* */ /** * Get the HTTP error code that should be returned. * * @return The corresponding HTTP error code. */ public int getHttpErrorCode(){ return httpErrorCode; } /** * Get the type of this error (from the UWS point of view ; FATAL or TRANSIENT). * * @return Type of this error. */ public ErrorType getUWSErrorType(){ return errorType; } }