[jboss-cvs] jboss-seam/src/ui/org/jboss/seam/ui ...
Shane Bryzak
sbryzak at redhat.com
Fri Mar 9 01:57:47 EST 2007
User: sbryzak2
Date: 07/03/09 01:57:47
Modified: src/ui/org/jboss/seam/ui UIFileUpload.java
Log:
JBSEAM-981
Revision Changes Path
1.2 +49 -27 jboss-seam/src/ui/org/jboss/seam/ui/UIFileUpload.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: UIFileUpload.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/ui/org/jboss/seam/ui/UIFileUpload.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -b -r1.1 -r1.2
--- UIFileUpload.java 27 Feb 2007 00:46:48 -0000 1.1
+++ UIFileUpload.java 9 Mar 2007 06:57:47 -0000 1.2
@@ -3,11 +3,14 @@
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Field;
+import java.lang.reflect.Method;
import javax.faces.component.UIComponentBase;
import javax.faces.context.FacesContext;
import javax.faces.context.ResponseWriter;
import javax.faces.el.ValueBinding;
+import javax.servlet.ServletRequest;
+import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import org.jboss.seam.web.MultipartRequest;
@@ -22,8 +25,6 @@
public static final String COMPONENT_TYPE = "org.jboss.seam.ui.UIFileUpload";
public static final String COMPONENT_FAMILY = "org.jboss.seam.ui.FileUpload";
- private static final String TOMAHAWK_WRAPPER_CLASS = "org.apache.myfaces.webapp.filter.MultipartRequestWrapper";
-
private String accept;
private String required;
private String disabled;
@@ -35,32 +36,11 @@
{
super.decode(context);
- Object request = context.getExternalContext().getRequest();
+ ServletRequest request = (ServletRequest) context.getExternalContext().getRequest();
- if (!(request instanceof MultipartRequest) &&
- request instanceof HttpServletRequestWrapper)
- {
- request = ((HttpServletRequestWrapper) request).getRequest();
- }
-
- if (!(request instanceof MultipartRequest) &&
- request.getClass().getName().equals(TOMAHAWK_WRAPPER_CLASS))
- {
- Field f = null;
- try
- {
- f = request.getClass().getDeclaredField("request");
- f.setAccessible(true);
- request = f.get(request);
- }
- catch (Exception ex)
- {
- // too bad
- }
- finally
+ if (!(request instanceof MultipartRequest))
{
- if (f != null) f.setAccessible(false);
- }
+ request = unwrapMultipartRequest(request);
}
if (request instanceof MultipartRequest)
@@ -100,6 +80,48 @@
}
}
+ private ServletRequest unwrapMultipartRequest(ServletRequest request)
+ {
+ while (!(request instanceof MultipartRequest))
+ {
+ boolean found = false;
+
+ for (Method m : request.getClass().getMethods())
+ {
+ if (ServletRequest.class.isAssignableFrom(m.getReturnType()) &&
+ m.getParameterTypes().length == 0)
+ {
+ try
+ {
+ request = (ServletRequest) m.invoke(request);
+ found = true;
+ break;
+ }
+ catch (Exception ex) { /* Ignore, try the next one */ }
+ }
+ }
+
+ if (!found)
+ {
+ for (Field f : request.getClass().getDeclaredFields())
+ {
+ if (ServletRequest.class.isAssignableFrom(f.getType()))
+ {
+ try
+ {
+ request = (ServletRequest) f.get(request);
+ }
+ catch (Exception ex) { /* Ignore */}
+ }
+ }
+ }
+
+ if (!found) break;
+ }
+
+ return request;
+ }
+
@Override
public void encodeEnd(FacesContext context)
throws IOException
More information about the jboss-cvs-commits
mailing list