001: /*
002: * ErrorReport.java February 2004
003: *
004: * Copyright (C) 2004, Niall Gallagher <niallg@users.sf.net>
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation.
009: *
010: * This library 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 Lesser General Public License for more details.
014: *
015: * You should have received a copy of the GNU Lesser General
016: * Public License along with this library; if not, write to the
017: * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
018: * Boston, MA 02111-1307 USA
019: */
020:
021: package simple.http.serve;
022:
023: import java.util.MissingResourceException;
024: import java.util.ResourceBundle;
025: import java.util.Locale;
026:
027: /**
028: * The <code>ErrorReport</code> is used to describe HTTP errors.
029: * Reporting the various HTTP errors requires that status codes
030: * and textual descriptions of the errors are provided. This
031: * will pair a provided status code with a short description of
032: * the error that HTTP status code represents as outlined by
033: * RFC 2612 section 6.1.1.
034: * <p>
035: * The <code>getCause</code> method will provide a description
036: * of the error using the <code>printStackTrace</code> method.
037: * This enables the cause of the error to be identified within
038: * the source code of the file that threw the exception.
039: *
040: * @author Niall Gallagher
041: */
042: public class ErrorReport implements Report {
043:
044: /**
045: * This is used to load the Error.properties file for
046: * a list of the matching HTTP error messages.
047: */
048: protected static ResourceBundle error;
049:
050: static {
051: try {
052: error = ResourceBundle.getBundle("simple.http.serve.Error");
053: } catch (MissingResourceException e) {
054: e.printStackTrace();
055: }
056: }
057:
058: /**
059: * This captures the stack trace of the issued exception.
060: */
061: private ExceptionBuffer cause;
062:
063: /**
064: * This is the status code that the report represents.
065: */
066: private int code;
067:
068: /**
069: * Constructor for the <code>ErrorReport</code> object. This
070: * will create an instance that uses the exception and the
071: * HTTP status code provided to describe the error event.
072: *
073: * @param cause this is the exception that caused the error
074: * @param code this is the HTTP status code of the error
075: */
076: public ErrorReport(Throwable cause, int code) {
077: this .cause = new ExceptionBuffer(cause);
078: this .code = code;
079: }
080:
081: /**
082: * Returns the HTTP status code that this report represents.
083: * This will typically describe an error using one of the 4xx
084: * or 5xx HTTP status codes. For details on the specific types
085: * of status codes used by HTTP/1.1 see RFC 2616 section 6.1.1.
086: *
087: * @return the HTTP status code this report represents
088: */
089: public int getCode() {
090: return code;
091: }
092:
093: /**
094: * Returns a short description of what caused this report.
095: * This will typically describe an error using one of the 4xx
096: * or 5xx HTTP status codes. For details on the specific types
097: * of status codes used by HTTP/1.1 see RFC 2616 section 6.1.1.
098: *
099: * @return the short description of what caused the report
100: */
101: public String getText() {
102: try {
103: return error.getString(String.valueOf(code));
104: } catch (MissingResourceException e) {
105: return "Unknown";
106: }
107: }
108:
109: /**
110: * This is used to acquire a detailed message describing the
111: * cause of the error. This will display exceptions caught
112: * while processing a HTTP request. The exception message is
113: * acquired from the <code>printStackTrace</code> method.
114: *
115: * @return a detailed description of what caused the report
116: */
117: public String getCause() {
118: return cause.getCause();
119: }
120: }
|