dgraham 2003/07/11 16:47:58 Modified: src/share/org/apache/struts/actions IncludeAction.java ForwardAction.java DispatchAction.java SwitchAction.java Log: Throw exceptions from execute() method instead of sending a failure response to the client. This allows the exception handling mechanism to respond to the error gracefully. PR# 16774. Revision Changes Path 1.5 +18 -23 jakarta-struts/src/share/org/apache/struts/actions/IncludeAction.java Index: IncludeAction.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/IncludeAction.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- IncludeAction.java 22 Sep 2002 05:58:46 -0000 1.4 +++ IncludeAction.java 11 Jul 2003 23:47:57 -0000 1.5 @@ -7,7 +7,7 @@ * * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2001 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -58,14 +58,14 @@ * <http://www.apache.org/>. * */ - - + package org.apache.struts.actions; - import javax.servlet.RequestDispatcher; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; @@ -73,7 +73,6 @@ import org.apache.struts.upload.MultipartRequestWrapper; import org.apache.struts.util.MessageResources; - /** * <p>An <strong>Action</strong> that includes the context-relative * URI specified by the <code>parameter</code> property of our associated @@ -100,7 +99,6 @@ * @author Craig R. McClanahan * @version $Revision$ $Date$ */ - public class IncludeAction extends Action { @@ -132,27 +130,24 @@ * * @exception Exception if an error occurs */ - public ActionForward execute(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) - throws Exception { + public ActionForward execute( + ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) + throws Exception { // Create a RequestDispatcher the corresponding resource String path = mapping.getParameter(); if (path == null) { - response.sendError - (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - messages.getMessage("include.path")); - return (null); + throw new ServletException(messages.getMessage("include.path")); } + RequestDispatcher rd = servlet.getServletContext().getRequestDispatcher(path); + if (rd == null) { - response.sendError - (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - messages.getMessage("include.rd", path)); - return (null); + throw new ServletException(messages.getMessage("include.rd", path)); } // Unwrap the multipart request, if there is one. 1.8 +14 -18 jakarta-struts/src/share/org/apache/struts/actions/ForwardAction.java Index: ForwardAction.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/ForwardAction.java,v retrieving revision 1.7 retrieving revision 1.8 diff -u -r1.7 -r1.8 --- ForwardAction.java 7 Mar 2003 05:00:20 -0000 1.7 +++ ForwardAction.java 11 Jul 2003 23:47:57 -0000 1.8 @@ -7,7 +7,7 @@ * * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2001 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -59,19 +59,18 @@ * */ - package org.apache.struts.actions; - +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; - /** * <p>An <strong>Action</strong> that forwards to the context-relative * URI specified by the <code>parameter</code> property of our associated @@ -98,7 +97,6 @@ * @author Craig R. McClanahan * @version $Revision$ $Date$ */ - public class ForwardAction extends Action { @@ -130,20 +128,18 @@ * * @exception Exception if an error occurs */ - public ActionForward execute(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) - throws Exception { + public ActionForward execute( + ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) + throws Exception { // Create a RequestDispatcher the corresponding resource String path = mapping.getParameter(); if (path == null) { - response.sendError - (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - messages.getMessage("forward.path")); - return (null); + throw new ServletException(messages.getMessage("forward.path")); } // Let the controller handle the request 1.16 +32 -38 jakarta-struts/src/share/org/apache/struts/actions/DispatchAction.java Index: DispatchAction.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/DispatchAction.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- DispatchAction.java 10 Jul 2003 02:59:06 -0000 1.15 +++ DispatchAction.java 11 Jul 2003 23:47:57 -0000 1.16 @@ -65,6 +65,7 @@ import java.lang.reflect.Method; import java.util.HashMap; +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -203,10 +204,10 @@ if (parameter == null) { String message = messages.getMessage("dispatch.handler", mapping.getPath()); + log.error(message); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - message); - return (null); + + throw new ServletException(message); } // Identify the method name to be dispatched to. @@ -222,23 +223,24 @@ * Method which is dispatched to when there is no value for specified * request parameter included in the request. Subclasses of * <code>DispatchAction</code> should override this method if they wish - * to provide default behavior different than producing an HTTP - * "Bad Request" error. - * + * to provide default behavior different than throwing a ServletException. */ - protected ActionForward unspecified(ActionMapping mapping, - ActionForm form, - HttpServletRequest request, - HttpServletResponse response) + protected ActionForward unspecified( + ActionMapping mapping, + ActionForm form, + HttpServletRequest request, + HttpServletResponse response) throws Exception { String message = - messages.getMessage("dispatch.parameter", mapping.getPath(), - mapping.getParameter()); + messages.getMessage( + "dispatch.parameter", + mapping.getPath(), + mapping.getParameter()); + log.error(message); - response.sendError(HttpServletResponse.SC_BAD_REQUEST, message); - return (null); + throw new ServletException(message); } @@ -265,36 +267,31 @@ Method method = null; try { method = getMethod(name); + } catch (NoSuchMethodException e) { String message = - messages.getMessage("dispatch.method", mapping.getPath(), - name); + messages.getMessage("dispatch.method", mapping.getPath(), name); log.error(message, e); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - message); - return (null); + throw e; } ActionForward forward = null; try { Object args[] = { mapping, form, request, response }; forward = (ActionForward) method.invoke(this, args); + } catch (ClassCastException e) { String message = - messages.getMessage("dispatch.return", mapping.getPath(), - name); + messages.getMessage("dispatch.return", mapping.getPath(), name); log.error(message, e); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - message); - return (null); + throw e; + } catch (IllegalAccessException e) { String message = - messages.getMessage("dispatch.error", mapping.getPath(), - name); + messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); - response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, - message); - return (null); + throw e; + } catch (InvocationTargetException e) { // Rethrow the target exception if possible so that the // exception handling machinery can deal with it @@ -303,12 +300,9 @@ throw ((Exception) t); } else { String message = - messages.getMessage("dispatch.error", mapping.getPath(), - name); + messages.getMessage("dispatch.error", mapping.getPath(), name); log.error(message, e); - response.sendError - (HttpServletResponse.SC_INTERNAL_SERVER_ERROR, message); - return (null); + throw new ServletException(t); } } 1.10 +12 -17 jakarta-struts/src/share/org/apache/struts/actions/SwitchAction.java Index: SwitchAction.java =================================================================== RCS file: /home/cvs/jakarta-struts/src/share/org/apache/struts/actions/SwitchAction.java,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- SwitchAction.java 28 Nov 2002 07:12:52 -0000 1.9 +++ SwitchAction.java 11 Jul 2003 23:47:57 -0000 1.10 @@ -7,7 +7,7 @@ * * The Apache Software License, Version 1.1 * - * Copyright (c) 1999-2002 The Apache Software Foundation. All rights + * Copyright (c) 1999-2003 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without @@ -61,19 +61,19 @@ package org.apache.struts.actions; - +import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.apache.struts.Globals; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.util.MessageResources; import org.apache.struts.util.RequestUtils; -import org.apache.struts.Globals; - /** * <p>A standard <strong>Action</strong> that switches to a new module @@ -96,7 +96,6 @@ * @version $Revision$ $Date$ * @since Struts 1.1 */ - public class SwitchAction extends Action { @@ -145,20 +144,16 @@ if ((page == null) || (prefix == null)) { String message = messages.getMessage("switch.required"); log.error(message); - response.sendError(HttpServletResponse.SC_BAD_REQUEST, - message); - return (null); + throw new ServletException(message); } // Switch to the requested module - RequestUtils.selectModule(prefix, request, - getServlet().getServletContext()); + RequestUtils.selectModule(prefix, request, getServlet().getServletContext()); + if (request.getAttribute(Globals.MODULE_KEY) == null) { String message = messages.getMessage("switch.prefix", prefix); log.error(message); - response.sendError(HttpServletResponse.SC_BAD_REQUEST, - message); - return (null); + throw new ServletException(message); } // Forward control to the specified module-relative URI
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]