blob: 13b54f0197ea7eec003be56a181cb5079bb4a3be [file] [log] [blame]
/*
* #%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;
}
}