HDFS-2428. Convert com.sun.jersey.api.ParamException$QueryParamException to IllegalArgumentException and response it http BAD_REQUEST in webhdfs.
git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1183098 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
7d1a5078b7
commit
5904e00b4f
@ -116,6 +116,10 @@ Trunk (unreleased changes)
|
||||
HDFS-2441. Remove the Content-Type set by HttpServer.QuotingInputFilter in
|
||||
webhdfs responses. (szetszwo)
|
||||
|
||||
HDFS-2428. Convert com.sun.jersey.api.ParamException$QueryParamException
|
||||
to IllegalArgumentException and response it http BAD_REQUEST in webhdfs.
|
||||
(szetszwo)
|
||||
|
||||
Release 0.23.0 - Unreleased
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
@ -98,17 +98,18 @@ private static Token<BlockTokenIdentifier> toBlockToken(
|
||||
/** Convert an exception object to a Json string. */
|
||||
public static String toJsonString(final Exception e) {
|
||||
final Map<String, Object> m = new TreeMap<String, Object>();
|
||||
m.put("className", e.getClass().getName());
|
||||
m.put("exception", e.getClass().getSimpleName());
|
||||
m.put("message", e.getMessage());
|
||||
m.put("javaClassName", e.getClass().getName());
|
||||
return toJsonString(RemoteException.class, m);
|
||||
}
|
||||
|
||||
/** Convert a Json map to a RemoteException. */
|
||||
public static RemoteException toRemoteException(final Map<?, ?> json) {
|
||||
final Map<?, ?> m = (Map<?, ?>)json.get(RemoteException.class.getSimpleName());
|
||||
final String className = (String)m.get("className");
|
||||
final String message = (String)m.get("message");
|
||||
return new RemoteException(className, message);
|
||||
final String javaClassName = (String)m.get("javaClassName");
|
||||
return new RemoteException(javaClassName, message);
|
||||
}
|
||||
|
||||
private static String toJsonString(final Class<?> clazz, final Object value) {
|
||||
|
@ -29,17 +29,28 @@
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.hadoop.hdfs.web.JsonUtil;
|
||||
|
||||
import com.sun.jersey.api.ParamException;
|
||||
|
||||
/** Handle exceptions. */
|
||||
@Provider
|
||||
public class ExceptionHandler implements ExceptionMapper<Exception> {
|
||||
public static final Log LOG = LogFactory.getLog(ExceptionHandler.class);
|
||||
|
||||
@Override
|
||||
public Response toResponse(final Exception e) {
|
||||
public Response toResponse(Exception e) {
|
||||
if (LOG.isTraceEnabled()) {
|
||||
LOG.trace("GOT EXCEPITION", e);
|
||||
}
|
||||
|
||||
//Convert exception
|
||||
if (e instanceof ParamException) {
|
||||
final ParamException paramexception = (ParamException)e;
|
||||
e = new IllegalArgumentException("Invalid value for webhdfs parameter \""
|
||||
+ paramexception.getParameterName() + "\": "
|
||||
+ e.getCause().getMessage(), e);
|
||||
}
|
||||
|
||||
//Map response status
|
||||
final Response.Status s;
|
||||
if (e instanceof SecurityException) {
|
||||
s = Response.Status.UNAUTHORIZED;
|
||||
@ -49,7 +60,10 @@ public Response toResponse(final Exception e) {
|
||||
s = Response.Status.FORBIDDEN;
|
||||
} else if (e instanceof UnsupportedOperationException) {
|
||||
s = Response.Status.BAD_REQUEST;
|
||||
} else if (e instanceof IllegalArgumentException) {
|
||||
s = Response.Status.BAD_REQUEST;
|
||||
} else {
|
||||
LOG.warn("INTERNAL_SERVER_ERROR", e);
|
||||
s = Response.Status.INTERNAL_SERVER_ERROR;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user