Author: chris.laprun(a)jboss.com
Date: 2008-10-21 08:37:29 -0400 (Tue, 21 Oct 2008)
New Revision: 12112
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestDispatcherImpl.java
Log:
- JBPORTAL-2204: Use introspection to invoke getResponse on Sun JSF bridge. Note: only
works with bridge 1.2.3+
- Added better error reporting.
Modified:
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestDispatcherImpl.java
===================================================================
---
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestDispatcherImpl.java 2008-10-21
10:10:44 UTC (rev 12111)
+++
modules/portlet/trunk/portlet/src/main/java/org/jboss/portal/portlet/impl/jsr168/api/PortletRequestDispatcherImpl.java 2008-10-21
12:37:29 UTC (rev 12112)
@@ -22,31 +22,32 @@
******************************************************************************/
package org.jboss.portal.portlet.impl.jsr168.api;
+import org.jboss.portal.portlet.container.PortletApplication;
+import org.jboss.portal.portlet.container.PortletApplicationContext;
+import org.jboss.portal.portlet.impl.jsr168.Dispatch;
+import org.jboss.portal.portlet.impl.jsr168.DispatchType;
import org.jboss.portal.portlet.impl.jsr168.DispatchedHttpServletRequest;
import org.jboss.portal.portlet.impl.jsr168.DispatchedHttpServletResponse;
-import org.jboss.portal.portlet.impl.jsr168.DispatchType;
-import org.jboss.portal.portlet.impl.jsr168.Dispatch;
-import org.jboss.portal.portlet.container.PortletApplication;
-import org.jboss.portal.portlet.container.PortletApplicationContext;
+import javax.portlet.ActionRequest;
+import javax.portlet.EventRequest;
+import javax.portlet.MimeResponse;
import javax.portlet.PortletException;
+import javax.portlet.PortletRequest;
import javax.portlet.PortletRequestDispatcher;
+import javax.portlet.PortletResponse;
import javax.portlet.RenderRequest;
import javax.portlet.RenderResponse;
-import javax.portlet.PortletRequest;
-import javax.portlet.PortletResponse;
-import javax.portlet.ActionRequest;
-import javax.portlet.EventRequest;
import javax.portlet.ResourceRequest;
-import javax.portlet.MimeResponse;
import javax.portlet.filter.PortletRequestWrapper;
import javax.portlet.filter.PortletResponseWrapper;
import javax.servlet.RequestDispatcher;
+import javax.servlet.ServletContext;
import javax.servlet.ServletException;
-import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponseWrapper;
import java.io.IOException;
+import java.lang.reflect.Method;
/**
* @author <a href="mailto:julien@jboss.org">Julien Viet</a>
@@ -184,7 +185,8 @@
}
else
{
- throw new IllegalArgumentException();
+ // do we need something similar to unwrap(PortletResponse) behavior?
+ throw new IllegalArgumentException("Cannot unwrap request: " +
wrapped.getClass().getName());
}
}
}
@@ -204,7 +206,17 @@
}
else
{
- throw new IllegalArgumentException();
+ // attempt to invoke a potential getResponse method (workaround for
JBPORTAL-2204)
+ Class<? extends PortletResponse> wrappedClass = wrapped.getClass();
+ try
+ {
+ Method getResponse = wrappedClass.getMethod("getResponse");
+ wrapped = (PortletResponse)getResponse.invoke(wrapped);
+ }
+ catch (Exception e)
+ {
+ throw new IllegalArgumentException("Cannot unwrap response: " +
wrappedClass.getName());
+ }
}
}
}
Show replies by date