You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2008/08/14 01:14:32 UTC
svn commit: r685725 - in /myfaces/tomahawk/trunk/core: ./
src/main/java/org/apache/myfaces/webapp/filter/
Author: lu4242
Date: Wed Aug 13 16:14:31 2008
New Revision: 685725
URL: http://svn.apache.org/viewvc?rev=685725&view=rev
Log:
MYFACES-434 Make optional TomahawkFacesContextWrapper, and if ExtensionsFilter is correctly configured, use it rather than it.
Modified:
myfaces/tomahawk/trunk/core/pom.xml
myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ExtensionsFilter.java
myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ServeResourcePhaseListener.java
myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/TomahawkFacesContextFactory.java
Modified: myfaces/tomahawk/trunk/core/pom.xml
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/pom.xml?rev=685725&r1=685724&r2=685725&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/pom.xml (original)
+++ myfaces/tomahawk/trunk/core/pom.xml Wed Aug 13 16:14:31 2008
@@ -57,6 +57,17 @@
<scope>compile</scope>
</dependency>
+ <!-- Transitive dependency from commons-fileupload.
+ in 1.2 it was declared optional, but t:inputFileUpload
+ uses it indirectly, so it is necessary to include it
+ in our pom as runtime dependency -->
+ <dependency>
+ <groupId>commons-io</groupId>
+ <artifactId>commons-io</artifactId>
+ <version>1.3.2</version>
+ <scope>runtime</scope>
+ </dependency>
+
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ExtensionsFilter.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ExtensionsFilter.java?rev=685725&r1=685724&r2=685725&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ExtensionsFilter.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ExtensionsFilter.java Wed Aug 13 16:14:31 2008
@@ -18,16 +18,24 @@
*/
package org.apache.myfaces.webapp.filter;
+import java.io.IOException;
+
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.commons.fileupload.FileUpload;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.renderkit.html.util.AddResource;
import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
-import javax.servlet.*;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
/**
* This filter is mandatory for the use of many tomahawk components.
*
@@ -245,14 +253,6 @@
HttpServletResponse httpResponse = (HttpServletResponse) response;
HttpServletRequest httpRequest = (HttpServletRequest) request;
- HttpServletRequest extendedRequest = httpRequest;
-
- // For multipart/form-data requests
- // This is done by TomahawkFacesContextWrapper
- //if (FileUpload.isMultipartContent(httpRequest)) {
- // extendedRequest = new MultipartRequestWrapper(httpRequest, _uploadMaxFileSize, _uploadThresholdSize, _uploadRepositoryPath);
- //}
-
// Serve resources
AddResource addResource;
@@ -270,7 +270,14 @@
throw new ServletException(th);
}
- /*
+ HttpServletRequest extendedRequest = httpRequest;
+
+ // For multipart/form-data requests
+ // This is done by TomahawkFacesContextWrapper
+ if (FileUpload.isMultipartContent(httpRequest)) {
+ extendedRequest = new MultipartRequestWrapper(httpRequest, _uploadMaxFileSize, _uploadThresholdSize, _uploadRepositoryPath);
+ }
+
try
{
addResource.responseStarted();
@@ -336,9 +343,8 @@
{
addResource.responseFinished();
}
- */
- chain.doFilter(extendedRequest, response);
+ //chain.doFilter(extendedRequest, response);
}
public boolean isValidContentType(String contentType)
Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ServeResourcePhaseListener.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ServeResourcePhaseListener.java?rev=685725&r1=685724&r2=685725&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ServeResourcePhaseListener.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/ServeResourcePhaseListener.java Wed Aug 13 16:14:31 2008
@@ -35,7 +35,16 @@
import org.apache.myfaces.tomahawk.util.ExternalContextUtils;
/**
- * @author Martin Marinschek
+ * This listener is used for serve resources, as a replacement of
+ * ExtensionsFilter serve resources feature.
+ * <p>
+ * The idea is map FacesServlet to org.apache.myfaces.RESOURCE_VIRTUAL_PATH
+ * (Default is "/faces/myFacesExtensionResource), so this
+ * listener can receive the request.
+ * </p>
+ *
+ * @author Martin Marinschek (latest modification by $Author$)
+ * @version $Revision$ $Date$
*/
public class ServeResourcePhaseListener implements PhaseListener {
@@ -84,7 +93,7 @@
try
{
- addResource= AddResourceFactory.getInstance(request,(ServletContext) fc.getExternalContext().getContext());
+ addResource= AddResourceFactory.getInstance(request, context);
if( addResource.isResourceUri(context, request ) ){
addResource.serveResource(context, request, response);
event.getFacesContext().responseComplete();
Modified: myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/TomahawkFacesContextFactory.java
URL: http://svn.apache.org/viewvc/myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/TomahawkFacesContextFactory.java?rev=685725&r1=685724&r2=685725&view=diff
==============================================================================
--- myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/TomahawkFacesContextFactory.java (original)
+++ myfaces/tomahawk/trunk/core/src/main/java/org/apache/myfaces/webapp/filter/TomahawkFacesContextFactory.java Wed Aug 13 16:14:31 2008
@@ -23,16 +23,32 @@
import javax.faces.context.FacesContextFactory;
import javax.faces.lifecycle.Lifecycle;
import javax.servlet.ServletContext;
+import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
-import org.apache.commons.fileupload.FileUpload;
import org.apache.myfaces.renderkit.html.util.AddResource;
import org.apache.myfaces.renderkit.html.util.AddResourceFactory;
import org.apache.myfaces.tomahawk.util.ExternalContextUtils;
+/**
+ * The objective of this factory is this:
+ *
+ * 1. Wrap a multipart request (used for t:inputFileUpload),
+ * so the request could be correctly decoded.
+ * 2. If a buffered instance of AddResource is configured,
+ * ExtensionsFilter must buffer and add the resource reference
+ * to the head of jsf pages (for example when it is used
+ * DefaultAddResource)
+ *
+ * @author Martin Marinschek (latest modification by $Author$)
+ * @version $Revision$ $Date$
+ */
public class TomahawkFacesContextFactory extends FacesContextFactory {
+ public static final String DISABLE_TOMAHAWK_FACES_CONTEXT_WRAPPER =
+ "org.apache.myfaces.DISABLE_TOMAHAWK_FACES_CONTEXT_WRAPPER";
+
private FacesContextFactory delegate;
public TomahawkFacesContextFactory(FacesContextFactory delegate) {
@@ -43,23 +59,47 @@
if(!ExternalContextUtils.getRequestType(context, request).isPortlet())
{
- //This is servlet world
- //For handle buffered response we need to wrap response object here,
- //so all response will be written and then on facesContext
- //release() method write to the original response.
- //This could not be done on TomahawkFacesContextWrapper
- //constructor, because the delegate ExternalContext do
- //calls like dispatch, forward and redirect, that requires
- //the wrapped response instance to work properly.
- AddResource addResource = AddResourceFactory.getInstance((HttpServletRequest)request,(ServletContext)context);
-
- if (addResource.requiresBuffer())
+ ServletRequest servletRequest = (ServletRequest) request;
+ ServletContext servletContext = (ServletContext) context;
+ // If no ExtensionsFilter wraps before the call, and
+ //there is not a value indicating disabling the wrapping,
+ //use TomahawkFacesContextWrapper
+ if (servletRequest.getAttribute(ExtensionsFilter.DOFILTER_CALLED) == null &&
+ !getBooleanValue(servletContext.getInitParameter(
+ DISABLE_TOMAHAWK_FACES_CONTEXT_WRAPPER), false))
{
- ExtensionsResponseWrapper extensionsResponseWrapper = new ExtensionsResponseWrapper((HttpServletResponse)response);
- return new TomahawkFacesContextWrapper(delegate.getFacesContext(context, request, extensionsResponseWrapper, lifecycle),
- extensionsResponseWrapper);
+ //This is servlet world
+ //For handle buffered response we need to wrap response object here,
+ //so all response will be written and then on facesContext
+ //release() method write to the original response.
+ //This could not be done on TomahawkFacesContextWrapper
+ //constructor, because the delegate ExternalContext do
+ //calls like dispatch, forward and redirect, that requires
+ //the wrapped response instance to work properly.
+ AddResource addResource = AddResourceFactory.getInstance((HttpServletRequest)request,(ServletContext)context);
+
+ if (addResource.requiresBuffer())
+ {
+ ExtensionsResponseWrapper extensionsResponseWrapper = new ExtensionsResponseWrapper((HttpServletResponse)response);
+ return new TomahawkFacesContextWrapper(delegate.getFacesContext(context, request, extensionsResponseWrapper, lifecycle),
+ extensionsResponseWrapper);
+ }
+ }
+ else
+ {
+ //The wrapping was done by extensions filter, so
+ //TomahawkFacesContextWrapper is not needed
+ return delegate.getFacesContext(context, request, response, lifecycle);
}
}
return new TomahawkFacesContextWrapper(delegate.getFacesContext(context, request, response, lifecycle));
}
+
+ private static boolean getBooleanValue(String initParameter, boolean defaultVal)
+ {
+ if(initParameter == null || initParameter.trim().length()==0)
+ return defaultVal;
+
+ return (initParameter.equalsIgnoreCase("on") || initParameter.equals("1") || initParameter.equalsIgnoreCase("true"));
+ }
}