001 /*
002 * Cumulus4j - Securing your data in the cloud - http://cumulus4j.org
003 * Copyright (C) 2011 NightLabs Consulting GmbH
004 *
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program. If not, see <http://www.gnu.org/licenses/>.
017 */
018 package org.cumulus4j.keymanager.back.shared;
019
020 import javax.xml.bind.annotation.XmlRootElement;
021
022 /**
023 * {@link Response} implementation for sending an error back to the app-server.
024 * It can optionally wrap a {@link Throwable} to provide more precise information
025 * (the type) than just a message.
026 *
027 * @author Marco หงุ่ยตระกูล-Schulze - marco at nightlabs dot de
028 */
029 @XmlRootElement
030 public class ErrorResponse extends Response
031 {
032 private static final long serialVersionUID = 1L;
033
034 private String type;
035 private String message;
036
037 /**
038 * Create an empty instance of <code>ErrorResponse</code>.
039 * Only used for serialisation/deserialisation.
040 */
041 public ErrorResponse() { }
042
043 /**
044 * Create an instance of <code>ErrorResponse</code> in order to reply the given <code>request</code>.
045 *
046 * @param request the request to be replied.
047 * @param errorMessage a description of what went wrong.
048 */
049 public ErrorResponse(Request request, String errorMessage) {
050 super(request);
051 this.message = errorMessage;
052 }
053
054 /**
055 * Create an instance of <code>ErrorResponse</code> in order to reply the given <code>request</code>.
056 *
057 * @param request the request to be replied.
058 * @param throwable the error to be wrapped and sent back to the app-server instead of a normal response.
059 */
060 public ErrorResponse(Request request, Throwable throwable) {
061 super(request);
062 this.type = throwable.getClass().getName();
063 this.message = throwable.getMessage();
064 }
065
066 /**
067 * Get the error-type. This is a fully qualified class-name of the {@link Throwable}-sub-class
068 * passed to {@link #ErrorResponse(Request, Throwable)} or {@link #setType(String) otherwise set}.
069 * @return the error-type or <code>null</code>.
070 * @see #setType(String)
071 */
072 public String getType() {
073 return type;
074 }
075 /**
076 * Set the error-type.
077 * @param type the error-type or <code>null</code>. If not <code>null</code>, this must be a fully
078 * qualified class-name of the {@link Throwable}-sub-class.
079 * @see #getType()
080 */
081 public void setType(String type) {
082 this.type = type;
083 }
084
085 /**
086 * Get the error-message. If an exception was wrapped by this <code>ErrorResponse</code> instance,
087 * it will be the result of {@link Throwable#getMessage()}.
088 * @return the error-message.
089 * @see #setMessage(String)
090 */
091 public String getMessage() {
092 return message;
093 }
094 /**
095 * Set the error-message, i.e. a description of what went wrong and prevented successful handling
096 * of the request.
097 * @param errorMessage the error message.
098 * @see #getMessage()
099 */
100 public void setMessage(String errorMessage) {
101 this.message = errorMessage;
102 }
103 }