<!--
/***************************************************************************************************************************
 * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *  
 *  http://www.apache.org/licenses/LICENSE-2.0
 *  
 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations under the License.
 ***************************************************************************************************************************/
 -->

Predefined Exceptions

<p>
	Exceptions are defined for all standardized HTTP responses.
	These can be used to trigger HTTP errors simply by throwing an exception.
</p>
<p>
	These are identical in behavior to the Predefined Responses in the previous section, except these are meant
	to be thrown instead of returned.
</p>
<h5 class='figure'>Example:</h5>
<p class='bpcode w800'>
	<ja>@RestMethod</ja>(name=<js>"GET"</js>, path=<js>"/user/login"</js>)
	<jk>public</jk> Ok login(
		<ja>@FormData</ja>(<js>"username"</js>) String username, 
		<ja>@FormData</ja>(<js>"password"</js>) String password,
	) <jk>throws</jk> Unauthorized 
	{
		<jk>if</jk> (! <jsm>isOK</jsm>(username, password))
			<jk>throw new</jk> Unauthorized(<js>"You're not welcome!"</js>);
			
		<jk>return</jk> Ok.<jsf>OK</jsf>;
	}
</p>
<ul class='javatree'>
	<li class='jp'>{@link oaj.http.exception}
	<ul>
		<li class='jc'>{@link oaj.http.exception.BadRequest}
		<li class='jc'>{@link oaj.http.exception.Conflict}
		<li class='jc'>{@link oaj.http.exception.ExpectationFailed}
		<li class='jc'>{@link oaj.http.exception.FailedDependency}
		<li class='jc'>{@link oaj.http.exception.Forbidden}
		<li class='jc'>{@link oaj.http.exception.Gone}
		<li class='jc'>{@link oaj.http.exception.HttpVersionNotSupported}
		<li class='jc'>{@link oaj.http.exception.InsufficientStorage}
		<li class='jc'>{@link oaj.http.exception.InternalServerError}
		<li class='jc'>{@link oaj.http.exception.LengthRequired}
		<li class='jc'>{@link oaj.http.exception.Locked}
		<li class='jc'>{@link oaj.http.exception.LoopDetected}
		<li class='jc'>{@link oaj.http.exception.MethodNotAllowed}
		<li class='jc'>{@link oaj.http.exception.MisdirectedRequest}
		<li class='jc'>{@link oaj.http.exception.NetworkAuthenticationRequired}
		<li class='jc'>{@link oaj.http.exception.NotAcceptable}
		<li class='jc'>{@link oaj.http.exception.NotExtended}
		<li class='jc'>{@link oaj.http.exception.NotFound}
		<li class='jc'>{@link oaj.http.exception.NotImplemented}
		<li class='jc'>{@link oaj.http.exception.PayloadTooLarge}
		<li class='jc'>{@link oaj.http.exception.PreconditionFailed}
		<li class='jc'>{@link oaj.http.exception.PreconditionRequired}
		<li class='jc'>{@link oaj.http.exception.RangeNotSatisfiable}
		<li class='jc'>{@link oaj.http.exception.RequestHeaderFieldsTooLarge}
		<li class='jc'>{@link oaj.http.exception.ServiceUnavailable}
		<li class='jc'>{@link oaj.http.exception.TooManyRequests}
		<li class='jc'>{@link oaj.http.exception.Unauthorized}
		<li class='jc'>{@link oaj.http.exception.UnavailableForLegalReasons}
		<li class='jc'>{@link oaj.http.exception.UnprocessableEntity}
		<li class='jc'>{@link oaj.http.exception.UnsupportedMediaType}
		<li class='jc'>{@link oaj.http.exception.UpgradeRequired}
		<li class='jc'>{@link oaj.http.exception.UriTooLong}
		<li class='jc'>{@link oaj.http.exception.VariantAlsoNegotiates}
	</ul>
</ul>
<p>
	These exception extend from {@link java.lang.RuntimeException}, so they can optionally be specified in the thrown
	declaration of the method.
	The important distinction is that when part of the thrown declaration, they show up in the generated Swagger
	documentation, whereas they don't if not.  This behavior can be used to define what error conditions show in your Swagger doc.
</p>