View Javadoc

1   package org.cateproject.controller.error;
2   
3   import javax.servlet.http.HttpServletRequest;
4   import javax.servlet.http.HttpServletResponse;
5   
6   import org.apache.commons.logging.Log;
7   import org.apache.commons.logging.LogFactory;
8   import org.springframework.beans.TypeMismatchException;
9   import org.springframework.core.annotation.AnnotationUtils;
10  import org.springframework.util.StringUtils;
11  import org.springframework.web.bind.annotation.ResponseStatus;
12  import org.springframework.web.multipart.MaxUploadSizeExceededException;
13  import org.springframework.web.servlet.ModelAndView;
14  import org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver;
15  import org.springframework.webflow.execution.repository.snapshot.SnapshotNotFoundException;
16  
17  import com.ibm.lsid.LSIDException;
18  
19  import eu.etaxonomy.cdm.persistence.dao.common.OperationNotSupportedInPriorViewException;
20  
21  public class CateExceptionResolver extends ResponseStatusExceptionResolver {
22  	
23  	private static Log log = LogFactory.getLog(CateExceptionResolver.class);
24  	
25  	@Override
26  	protected ModelAndView doResolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception) {
27  		
28  		if(log.isDebugEnabled()) {
29  			for(StackTraceElement ste : exception.getStackTrace()) {
30  				log.error(ste);
31  			}
32  		}
33  		
34  		ModelAndView modelAndView = new ModelAndView("exception/error");
35  		if(exception instanceof LSIDException) {
36  			LSIDException lsidException = (LSIDException) exception;
37  			response.addHeader("LSID-Error-Code",Integer.toString(lsidException.getErrorCode()));
38  			response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);			
39  		} else if(exception instanceof TypeMismatchException) {
40  			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
41  		} else if(exception instanceof OperationNotSupportedInPriorViewException) {
42  			response.setStatus(HttpServletResponse.SC_NOT_ACCEPTABLE);
43  			modelAndView.setViewName("exception/versioningError");
44  		} else if(exception instanceof MaxUploadSizeExceededException) {
45  			response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
46  			modelAndView.setViewName("exception/maxUploadSizeExceeded");
47  		} else if(exception instanceof SnapshotNotFoundException) {
48  			response.setStatus(HttpServletResponse.SC_NOT_FOUND);
49  			modelAndView.setViewName("exception/snapshotNotFound");
50  		} else {
51  			ResponseStatus responseStatus = AnnotationUtils.findAnnotation(exception.getClass(), ResponseStatus.class);
52  			if (responseStatus != null) {
53  				int statusCode = responseStatus.value().value();
54  				String reason = responseStatus.reason();
55  				if (!StringUtils.hasLength(reason)) {
56  				    response.setStatus(statusCode);
57  				} else {
58  				    response.setStatus(statusCode, reason);
59  				}
60  			}
61  		}
62  		
63  		modelAndView.addObject("exception",exception);
64  		
65  		return modelAndView;
66  	}
67  
68  }