01: /*
02: * Copyright Aduna (http://www.aduna-software.com/) (c) 2007.
03: *
04: * Licensed under the Aduna BSD-style license.
05: */
06: package org.openrdf.http.server;
07:
08: import java.util.HashMap;
09: import java.util.Map;
10:
11: import javax.servlet.http.HttpServletRequest;
12: import javax.servlet.http.HttpServletResponse;
13:
14: import org.slf4j.Logger;
15: import org.slf4j.LoggerFactory;
16: import org.springframework.web.servlet.HandlerExceptionResolver;
17: import org.springframework.web.servlet.ModelAndView;
18:
19: import info.aduna.webapp.views.SimpleResponseView;
20:
21: /**
22: * Simple resolver for Exceptions: returns the correct response code and message
23: * to the client.
24: *
25: * @author Herko ter Horst
26: */
27: public class ProtocolExceptionResolver implements
28: HandlerExceptionResolver {
29:
30: private Logger logger = LoggerFactory.getLogger(this .getClass());
31:
32: public ModelAndView resolveException(HttpServletRequest request,
33: HttpServletResponse response, Object handler,
34: Exception exception) {
35: logger
36: .info("ProtocolExceptionResolver.resolveException() called");
37:
38: int statusCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
39: String errMsg = exception.getMessage();
40:
41: if (exception instanceof HTTPException) {
42: HTTPException httpExc = (HTTPException) exception;
43: statusCode = httpExc.getStatusCode();
44:
45: if (exception instanceof ClientHTTPException) {
46: logger.info("Client sent bad request ({}): {}",
47: statusCode, errMsg);
48: } else {
49: logger.error("Error while handling request ({}): {}",
50: statusCode, errMsg);
51: }
52: } else {
53: logger.error("Error while handling request", exception);
54: }
55:
56: Map<String, Object> model = new HashMap<String, Object>();
57: model.put(SimpleResponseView.SC_KEY, Integer
58: .valueOf(statusCode));
59: model.put(SimpleResponseView.CONTENT_KEY, errMsg);
60:
61: return new ModelAndView(SimpleResponseView.getInstance(), model);
62: }
63: }
|