001 package hirondelle.web4j.model; 002 003 /** 004 Thrown by {@link hirondelle.web4j.security.ApplicationFirewall} 005 when a problem with an incoming HTTP request is detected. 006 007 <P><span class="highlight">This class is intended only for bugs and malicious attacks. 008 It is not intended for normal business logic.</span> If a <tt>BadRequestException</tt> is 009 thrown by {@link hirondelle.web4j.security.ApplicationFirewall}, then the 010 {@link hirondelle.web4j.Controller} will reply with a short, unpolished 011 response (often a default page defined by the server). Under normal operating conditions, 012 the end user should not see such a response. 013 014 <P>See {@link hirondelle.web4j.security.ApplicationFirewall} for more information. 015 016 <P><em>Design Note</em> 017 <br>This class is not an {@link AppException}, since it is meant to encapsulate only a 018 single item at a time. 019 */ 020 public final class BadRequestException extends Exception { 021 022 /** 023 Construct using a standard HTTP status code. 024 025 <P>The caller is highly encouraged to pass a field defined in 026 {@link javax.servlet.http.HttpServletResponse} to this constructor 027 ({@link javax.servlet.http.HttpServletResponse#SC_NOT_IMPLEMENTED}, and so on). 028 029 <P>See <a href="http://www.w3.org/Protocols/rfc2616/rfc2616.html">W3C HTTP Specification</a> 030 for more information on status codes. 031 */ 032 public BadRequestException(int aHTTPStatusCode){ 033 fStatusCode = aHTTPStatusCode; 034 fErrorMessage = null; 035 } 036 037 /** 038 Construct using a standard HTTP status code and an error message to be presented to the 039 user. 040 041 See {@link #BadRequestException(int)} for more information. 042 */ 043 public BadRequestException(int aHTTPStatusCode, String aErrorMessage){ 044 fStatusCode = aHTTPStatusCode; 045 fErrorMessage = aErrorMessage; 046 } 047 048 /** Return the status code passed to the constructor. */ 049 public int getStatusCode(){ 050 return fStatusCode; 051 } 052 053 /** 054 Return the error message passed to the constructor. If constructed without a message, then 055 return <tt>null</tt>. 056 */ 057 public String getErrorMessage(){ 058 return fErrorMessage; 059 } 060 061 /** Intended for debugging only. */ 062 @Override public String toString(){ 063 return ToStringUtil.getText(this); 064 } 065 066 //PRIVATE // 067 private final int fStatusCode; 068 private final String fErrorMessage; 069 }