/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.http.server;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
import info.aduna.webapp.views.SimpleResponseView;
/**
* Simple resolver for Exceptions: returns the correct response code and message
* to the client.
*
* @author Herko ter Horst
*/
public class ProtocolExceptionResolver implements HandlerExceptionResolver {
private Logger logger = LoggerFactory.getLogger(this.getClass());
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception exception)
{
logger.info("ProtocolExceptionResolver.resolveException() called");
int statusCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
String errMsg = exception.getMessage();
if (exception instanceof HTTPException) {
HTTPException httpExc = (HTTPException)exception;
statusCode = httpExc.getStatusCode();
if (exception instanceof ClientHTTPException) {
logger.info("Client sent bad request ({}): {}", statusCode, errMsg);
}
else {
logger.error("Error while handling request ({}): {}", statusCode, errMsg);
}
}
else {
logger.error("Error while handling request", exception);
}
Map<String, Object> model = new HashMap<String, Object>();
model.put(SimpleResponseView.SC_KEY, Integer.valueOf(statusCode));
model.put(SimpleResponseView.CONTENT_KEY, errMsg);
return new ModelAndView(SimpleResponseView.getInstance(), model);
}
}