| /* |
| * #%L |
| * Apache Geronimo JAX-RS Spec 2.0 |
| * %% |
| * Copyright (C) 2003 - 2014 The Apache Software Foundation |
| * %% |
| * Licensed 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. |
| * #L% |
| */ |
| |
| package javax.ws.rs; |
| |
| import javax.ws.rs.core.Response; |
| |
| public class WebApplicationException extends RuntimeException { |
| |
| private static final long serialVersionUID = 8273970399584007146L; |
| |
| private final Response response; |
| |
| public WebApplicationException() { |
| this((Throwable) null, Response.Status.INTERNAL_SERVER_ERROR); |
| } |
| |
| public WebApplicationException(String message) { |
| this(message, null, Response.Status.INTERNAL_SERVER_ERROR); |
| } |
| |
| public WebApplicationException(final Response response) { |
| this((Throwable) null, response); |
| } |
| |
| public WebApplicationException(final String message, final Response response) { |
| this(message, null, response); |
| } |
| |
| public WebApplicationException(final int status) { |
| this((Throwable) null, status); |
| } |
| |
| public WebApplicationException(final String message, final int status) { |
| this(message, null, status); |
| } |
| |
| public WebApplicationException(final Response.Status status) { |
| this((Throwable) null, status); |
| } |
| |
| public WebApplicationException(final String message, final Response.Status status) { |
| this(message, null, status); |
| } |
| |
| public WebApplicationException(final Throwable cause) { |
| this(cause, Response.Status.INTERNAL_SERVER_ERROR); |
| } |
| |
| public WebApplicationException(final String message, final Throwable cause) { |
| this(message, cause, Response.Status.INTERNAL_SERVER_ERROR); |
| } |
| |
| public WebApplicationException(final Throwable cause, final Response response) { |
| this(computeExceptionMessage(response), cause, response); |
| } |
| |
| public WebApplicationException(final String message, final Throwable cause, final Response response) { |
| super(message, cause); |
| if (response == null) { |
| this.response = Response.serverError().build(); |
| } else { |
| this.response = response; |
| } |
| } |
| |
| private static String computeExceptionMessage(Response response) { |
| final Response.StatusType statusInfo; |
| if (response != null) { |
| statusInfo = response.getStatusInfo(); |
| } else { |
| statusInfo = Response.Status.INTERNAL_SERVER_ERROR; |
| } |
| return "HTTP " + statusInfo.getStatusCode() + ' ' + statusInfo.getReasonPhrase(); |
| } |
| |
| public WebApplicationException(final Throwable cause, final int status) { |
| this(cause, Response.status(status).build()); |
| } |
| |
| public WebApplicationException(final String message, final Throwable cause, final int status) { |
| this(message, cause, Response.status(status).build()); |
| } |
| |
| public WebApplicationException(final Throwable cause, final Response.Status status) throws IllegalArgumentException { |
| this(cause, Response.status(status).build()); |
| } |
| |
| public WebApplicationException(final String message, final Throwable cause, final Response.Status status) |
| throws IllegalArgumentException { |
| this(message, cause, Response.status(status).build()); |
| } |
| |
| public Response getResponse() { |
| return response; |
| } |
| |
| static Response validate(final Response response, Response.Status expectedStatus) { |
| if (expectedStatus.getStatusCode() != response.getStatus()) { |
| throw new IllegalArgumentException(String.format("Invalid response status code. Expected [%d], was [%d].", |
| expectedStatus.getStatusCode(), response.getStatus())); |
| } |
| return response; |
| } |
| |
| static Response validate(final Response response, Response.Status.Family expectedStatusFamily) { |
| if (response.getStatusInfo().getFamily() != expectedStatusFamily) { |
| throw new IllegalArgumentException( |
| String.format("Status code of the supplied response [%d] is not from the required status code family \"%s\".", |
| response.getStatus(), expectedStatusFamily)); |
| } |
| return response; |
| } |
| } |