[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