Author: julien(a)jboss.com
Date: 2008-03-03 10:40:18 -0500 (Mon, 03 Mar 2008)
New Revision: 10182
Added:
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/ErrorHandlingFilter.java
Modified:
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/ControllerFilter.java
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/taglib/PortletTag.java
modules/portlet/trunk/portal/src/main/resources/simple-portal-war/WEB-INF/web.xml
Log:
perform error handling in a error handling filter instead of the controller filter
Added:
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/ErrorHandlingFilter.java
===================================================================
---
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/ErrorHandlingFilter.java
(rev 0)
+++
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/ErrorHandlingFilter.java 2008-03-03
15:40:18 UTC (rev 10182)
@@ -0,0 +1,95 @@
+/******************************************************************************
+ * JBoss, a division of Red Hat *
+ * Copyright 2008, Red Hat Middleware, LLC, and individual *
+ * contributors as indicated by the @authors tag. See the *
+ * copyright.txt in the distribution for a full listing of *
+ * individual contributors. *
+ * *
+ * This is free software; you can redistribute it and/or modify it *
+ * under the terms of the GNU Lesser General Public License as *
+ * published by the Free Software Foundation; either version 2.1 of *
+ * the License, or (at your option) any later version. *
+ * *
+ * This software is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
+ * Lesser General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU Lesser General Public *
+ * License along with this software; if not, write to the Free *
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA *
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org. *
+ ******************************************************************************/
+package org.jboss.portal.portlet.portal;
+
+import org.apache.log4j.Logger;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.FilterChain;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author <a href="mailto:julien@jboss.org">Julien Viet</a>
+ * @version $Revision: 630 $
+ */
+public class ErrorHandlingFilter implements Filter
+{
+
+ /** . */
+ private final Logger log = Logger.getLogger(ErrorHandlingFilter.class);
+
+ public void init(FilterConfig config) throws ServletException
+ {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response, FilterChain
chain) throws IOException, ServletException
+ {
+ doFilter((HttpServletRequest)request, (HttpServletResponse)response, chain);
+ }
+
+ public void doFilter(HttpServletRequest request, HttpServletResponse response,
FilterChain chain) throws IOException, ServletException
+ {
+
+ try
+ {
+ chain.doFilter(request, response);
+ }
+ catch (ServletException e)
+ {
+ log.error("Error during portal processing: " + e.getMessage(),
e.getCause());
+
+ //
+ if (Constants.PORTLET_ERROR.equals(e.getMessage()))
+ {
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ else if (Constants.UNAVAILABLE.equals(e.getMessage()))
+ {
+ response.sendError(HttpServletResponse.SC_SERVICE_UNAVAILABLE);
+ }
+ else if (Constants.INTERNAL_ERROR.equals(e.getMessage()))
+ {
+ response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ }
+ else if (Constants.NOT_FOUND.equals(e.getMessage()))
+ {
+ response.sendError(HttpServletResponse.SC_NOT_FOUND);
+ }
+ else
+ {
+ throw e;
+ }
+ }
+
+ }
+
+ public void destroy()
+ {
+ }
+}
Modified:
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/ControllerFilter.java
===================================================================
---
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/ControllerFilter.java 2008-03-03
15:34:52 UTC (rev 10181)
+++
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/ControllerFilter.java 2008-03-03
15:40:18 UTC (rev 10182)
@@ -27,9 +27,11 @@
import org.jboss.portal.portlet.PortletInvoker;
import org.jboss.portal.portlet.PortletInvokerException;
import org.jboss.portal.portlet.URLFormat;
+import org.jboss.portal.portlet.portal.Constants;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.response.ErrorResponse;
import org.jboss.portal.portlet.invocation.response.ContentResponse;
+import org.jboss.portal.portlet.invocation.response.UnavailableResponse;
import org.jboss.portal.portlet.controller.PortletController;
import org.jboss.portal.portlet.controller.request.PortletActionRequest;
import org.jboss.portal.portlet.controller.impl.request.ControllerRequestFactory;
@@ -228,13 +230,17 @@
//
if (errorResponse.getCause() != null)
{
- throw new ServletException(errorResponse.getMessage(),
errorResponse.getCause());
+ throw new ServletException(Constants.PORTLET_ERROR,
errorResponse.getCause());
}
else
{
- throw new ServletException(errorResponse.getMessage());
+ throw new ServletException(Constants.PORTLET_ERROR);
}
}
+ else if (pir instanceof UnavailableResponse)
+ {
+ throw new ServletException(Constants.UNAVAILABLE);
+ }
else
{
// todo
Modified:
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/taglib/PortletTag.java
===================================================================
---
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/taglib/PortletTag.java 2008-03-03
15:34:52 UTC (rev 10181)
+++
modules/portlet/trunk/portal/src/main/java/org/jboss/portal/portlet/portal/jsp/taglib/PortletTag.java 2008-03-03
15:40:18 UTC (rev 10182)
@@ -27,6 +27,7 @@
import org.jboss.portal.portlet.portal.jsp.PortalResponse;
import org.jboss.portal.portlet.portal.jsp.WindowDef;
import org.jboss.portal.portlet.portal.jsp.WindowResult;
+import org.jboss.portal.portlet.portal.Constants;
import org.jboss.portal.portlet.invocation.response.PortletInvocationResponse;
import org.jboss.portal.portlet.invocation.response.ErrorResponse;
import org.jboss.portal.portlet.invocation.response.UnavailableResponse;
Modified:
modules/portlet/trunk/portal/src/main/resources/simple-portal-war/WEB-INF/web.xml
===================================================================
---
modules/portlet/trunk/portal/src/main/resources/simple-portal-war/WEB-INF/web.xml 2008-03-03
15:34:52 UTC (rev 10181)
+++
modules/portlet/trunk/portal/src/main/resources/simple-portal-war/WEB-INF/web.xml 2008-03-03
15:40:18 UTC (rev 10182)
@@ -27,10 +27,18 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<filter>
+ <filter-name>ErrorHandlingFilter</filter-name>
+
<filter-class>org.jboss.portal.portlet.portal.ErrorHandlingFilter</filter-class>
+ </filter>
+ <filter>
<filter-name>ControllerFilter</filter-name>
<filter-class>org.jboss.portal.portlet.portal.jsp.ControllerFilter</filter-class>
</filter>
<filter-mapping>
+ <filter-name>ErrorHandlingFilter</filter-name>
+ <url-pattern>*.jsp</url-pattern>
+ </filter-mapping>
+ <filter-mapping>
<filter-name>ControllerFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>