[ http://mc4j.org/jira/browse/STS-235?page=comments#action_10405 ] 
            
Andreas Schulz commented on STS-235:
------------------------------------

I implemented a custom requestWrapper but that did not work. If I extend the 
StripesRequestWrapper, I can't (in case of a failure ) call the super(request) 
method to get a default request from the HttpServletRequestWrapper because the 
StripesRequestWrapper (which is my parent class) did not come with such a 
constructor. So if I call the wrapRequest method of my custom wrapper and an 
IOException is thrown, all I can do is call the super(request, pathToTempDir, 
maxTotalPostSize); which will also result in an IOException.

After hours of trail and error I decided to rebuild Stripes using a modified 
StripesRequestWrapper with a changed wrapRequest() method:

public StripesRequestWrapper(HttpServletRequest request,
                                 String pathToTempDir,
                                 int maxTotalPostSize) throws 
StripesServletException {
        super(request);


        try {
            String contentType = request.getContentType();

            if (contentType != null && 
contentType.startsWith("multipart/form-data")) {
                this.multipart = new MultipartRequest(request,
                                                      pathToTempDir,
                                                      maxTotalPostSize,
                                                      
request.getCharacterEncoding());
            }
        }
        catch (IOException e) {
            Matcher matcher = exceptionPattern.matcher(e.getMessage());

            if (matcher.matches()) {
                throw new 
FileUploadLimitExceededException(Integer.parseInt(matcher.group(2)),
                                                           
Integer.parseInt(matcher.group(1)));
            }
            else {
                if(e.getMessage().equals("Corrupt form data: premature 
ending")){
                    // do further testings whether or not this is a "real" 
exception
                    // ...
                }
                else{
                    throw new StripesServletException("Could not construct 
request wrapper.", e);
                }
            }
        }
    }

And that one works fine with Magnolia. Maybe you could provide the 
StripesRequestWrapper with a default constructor like this:

public StripesRequestWrapper(HttpServletRequest servletRequest){
   super(servletRequest);
}

Then I could subclass the StripesRequestWrapper and in case of a failure call 
super(request) which would lead the request through the StripesRequestWrapper 
directly into the HttpServletRequestWrapper. In that case I'm not forced to 
change the original stripes source.

> multipart/form-data without file upload
> ---------------------------------------
>
>                 Key: STS-235
>                 URL: http://mc4j.org/jira/browse/STS-235
>             Project: Stripes
>          Issue Type: Bug
>    Affects Versions: Release 1.3.2
>            Reporter: Andreas Schulz
>         Assigned To: Tim Fennell
>
> If the StripesFilter receives a multipart/form-data request with no file 
> attached to it an IOException is thrown. But some applications like Magnolia 
> CMS use this enctype by default. So it crashes when using Stripes.
> Stacktrace:
> java.io.IOException: Corrupt form data: premature ending
>       at 
> com.oreilly.servlet.multipart.MultipartParser.<init>(MultipartParser.java:205)
>       at 
> com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:222)
>       at 
> com.oreilly.servlet.MultipartRequest.<init>(MultipartRequest.java:173)
>       at 
> net.sourceforge.stripes.controller.StripesRequestWrapper.<init>(StripesRequestWrapper.java:109)
>       at 
> net.sourceforge.stripes.controller.StripesFilter.wrapRequest(StripesFilter.java:239)
>       at 
> net.sourceforge.stripes.controller.StripesFilter.doFilter(StripesFilter.java:209)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>       at 
> info.magnolia.cms.filters.MagnoliaManagedFilter$CustomFilterChain.doFilter(MagnoliaManagedFilter.java:80)
>       at 
> info.magnolia.cms.filters.UnsetContextFilter.doFilter(UnsetContextFilter.java:44)
>       at 
> info.magnolia.cms.filters.MagnoliaManagedFilter$CustomFilterChain.doFilter(MagnoliaManagedFilter.java:84)
>       at 
> info.magnolia.cms.security.SecurityFilter.doFilter(SecurityFilter.java:96)
>       at 
> info.magnolia.cms.filters.MagnoliaManagedFilter$CustomFilterChain.doFilter(MagnoliaManagedFilter.java:84)
>       at 
> info.magnolia.cms.filters.MultipartRequestFilter.doFilter(MultipartRequestFilter.java:80)
>       at 
> info.magnolia.cms.filters.MagnoliaManagedFilter$CustomFilterChain.doFilter(MagnoliaManagedFilter.java:84)
>       at 
> info.magnolia.cms.filters.ContentTypeFilter.doFilter(ContentTypeFilter.java:66)
>       at 
> info.magnolia.cms.filters.MagnoliaManagedFilter$CustomFilterChain.doFilter(MagnoliaManagedFilter.java:84)
>       at 
> info.magnolia.cms.filters.MagnoliaManagedFilter.doFilter(MagnoliaManagedFilter.java:53)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
>       at 
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
>       at 
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
>       at 
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
>       at 
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
>       at 
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
>       at 
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
>       at 
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
>       at 
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
>       at 
> org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
>       at 
> org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
>       at 
> org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
>       at 
> org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
>       at java.lang.Thread.run(Unknown Source)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://mc4j.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development

Reply via email to