001 /*
002 * Copyright 2007-2008 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.kns.web.struts.pojo;
017
018 import java.util.Map;
019
020 import javax.servlet.http.HttpServletRequest;
021 import javax.servlet.http.HttpServletResponse;
022
023 import org.apache.log4j.Logger;
024 import org.apache.struts.action.ActionForm;
025 import org.apache.struts.action.ActionForward;
026 import org.apache.struts.action.ActionMapping;
027 import org.apache.struts.action.ExceptionHandler;
028 import org.apache.struts.config.ExceptionConfig;
029 import org.kuali.rice.kns.util.IncidentReportUtils;
030 import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
031
032 /**
033 * This class is the exception handler for the base exception class java.lang.Throwable
034 * and is defined as global exception in the struts-config.xml.
035 *
036 * @author Kuali Rice Team (rice.collab@kuali.org)
037 *
038 */
039 public class StrutsExceptionIncidentHandler extends ExceptionHandler {
040 private static final Logger LOG=
041 Logger.getLogger(StrutsExceptionIncidentHandler.class);
042
043 /**
044 * This is defined in struts-config.xml for forwarding this exception to a specified
045 * exception handler.
046 * <p>Value is exceptionIncidentHandler
047 */
048 public static final String EXCEPTION_INCIDENT_HANDLER="exceptionIncidentHandler";
049
050 /**
051 * This overridden method extract exception information such as component name,
052 * user name and email, etc.
053 *
054 * @see org.apache.struts.action.ExceptionHandler#execute(
055 * java.lang.Exception,
056 * org.apache.struts.config.ExceptionConfig,
057 * org.apache.struts.action.ActionMapping,
058 * org.apache.struts.action.ActionForm,
059 * javax.servlet.http.HttpServletRequest,
060 * javax.servlet.http.HttpServletResponse)
061 */
062 public ActionForward execute(Exception exception,
063 ExceptionConfig exceptionConfig,
064 ActionMapping mapping,
065 ActionForm form,
066 HttpServletRequest request,
067 HttpServletResponse response) {
068
069 if (LOG.isTraceEnabled()) {
070 String message=String.format("ENTRY %s", exception.getMessage());
071 LOG.trace(message);
072 }
073
074 LOG.error("Exception being handled by Exception Handler", exception);
075
076 String documentId="";
077 if (form instanceof KualiDocumentFormBase) {
078 KualiDocumentFormBase docForm=(KualiDocumentFormBase)form;
079 if (docForm.getDocument() != null) {
080 documentId=docForm.getDocument().getDocumentNumber();
081 }
082 }
083
084 Map<String, String> properties = IncidentReportUtils.populateRequestForIncidentReport(exception, documentId, form.getClass().getSimpleName(), request);
085
086 ActionForward forward=mapping.findForward(EXCEPTION_INCIDENT_HANDLER);
087
088 if (LOG.isTraceEnabled()) {
089 String message=String.format("ENTRY %s%n%s%n%s",
090 exception.getMessage(),
091 properties.toString(),
092 (forward==null)?"null":forward.getPath());
093 LOG.trace(message);
094 }
095
096 return forward;
097 }
098
099 }
100