You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by at...@apache.org on 2005/11/07 02:09:36 UTC

svn commit: r331172 - /portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java

Author: ate
Date: Sun Nov  6 17:09:29 2005
New Revision: 331172

URL: http://svn.apache.org/viewcvs?rev=331172&view=rev
Log:
If a Portlet doesn't handle (ActionRequest) exceptions, propagate them back to the portlet container, as required by the Portlet API/Specs.
See for example: PLT.12.2.2. 
Setting the PortletMode after a redirect is requested leads to an IllegalStateException.
If that exceptions isn't handled, the redirect may *not* be executed.
The JetspeedContainerServlet trapped and surpressed these exceptions.
The Portlet Container as result didn't know anything about what happened and executed the redirect.

Modified:
    portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java

Modified: portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java?rev=331172&r1=331171&r2=331172&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java (original)
+++ portals/jetspeed-2/trunk/commons/src/java/org/apache/jetspeed/container/JetspeedContainerServlet.java Sun Nov  6 17:09:29 2005
@@ -230,39 +230,58 @@
         }
         catch (Throwable t)
         {
-            ServletContext context = getServletContext();
-            context.log(JCS + "Error rendering portlet \"" + portletName + "\": " + t.toString(), t);
-            try
+            if (method != ContainerConstants.METHOD_ACTION)
             {
-                String errorTemplate = getInitParameter("portal.error.page");
-                if (errorTemplate == null)
+                ServletContext context = getServletContext();
+                context.log(JCS + "Error rendering portlet \"" + portletName + "\": " + t.toString(), t);
+                try
                 {
-                    errorTemplate = "/WEB-INF/templates/generic/html/error.vm";
+                    String errorTemplate = getInitParameter("portal.error.page");
+                    if (errorTemplate == null)
+                    {
+                        errorTemplate = "/WEB-INF/templates/generic/html/error.vm";
+                    }
+                    if (null != context.getResource(errorTemplate))
+                    {
+                        RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(errorTemplate);
+                        request.setAttribute("e", t);
+                        StringWriter stackTrace = new StringWriter();
+                        t.printStackTrace(new PrintWriter(stackTrace));
+                        request.setAttribute("stacktrace", stackTrace.toString());
+                        dispatcher.include(request, response);
+                    }
+                    else
+                    {
+                        displayPortletNotAvailableMessage(t, response, portletName);
+                    }
                 }
-                if (null != context.getResource(errorTemplate))
+                catch (Throwable e)
                 {
-                    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(errorTemplate);                
-                    request.setAttribute("e", t);
-                    StringWriter stackTrace = new StringWriter();
-                    t.printStackTrace(new PrintWriter(stackTrace));
-                    request.setAttribute("stacktrace", stackTrace.toString());
-                    dispatcher.include(request, response);
+                    displayPortletNotAvailableMessage(t, response, portletName);
                 }
-                else
+                finally
                 {
-                    if (method != ContainerConstants.METHOD_ACTION)
-                    {
-                        displayPortletNotAvailableMessage(t, response, portletName);
-                    }
+                    t.printStackTrace();
                 }
             }
-            catch (Throwable e)
+            else
             {
-                displayPortletNotAvailableMessage(t, response, portletName);                
-            }
-            finally
-            {
-                t.printStackTrace();
+                if ( t instanceof RuntimeException )
+                {
+                    throw (RuntimeException)t;
+                }
+                else if (t instanceof IOException )
+                {
+                    throw (IOException)t;
+                }
+                else if (t instanceof ServletException)
+                {
+                    throw (ServletException)t;
+                }
+                else
+                {
+                    throw new ServletException(t);
+                }
             }
         }
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org