[ https://issues.apache.org/jira/browse/CXF-5837?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14051771#comment-14051771 ]
Daniel Kulp commented on CXF-5837: ---------------------------------- Most likely, the fix SHOULD go into OutgoingChainInterceptor where we set the flag to enable the input caching. My gut feeling is that in OutgoingChainInterceptor, we should do: {code:java} if (message.get("cxf.io.cacheinput") == null) { message.put("cxf.io.cacheinput", Boolean.TRUE); } {code} and in the JAX-RS code, if we know we're done outputting stuff (like where the 413 is set), set that to Boolean.FALSE on the message. There's probably other HTTP codes and other place in JAX-RS where we know we won't need any more of the input so no point in caching it. > Upload size limit status 500 for files twice bigger than the limit > ------------------------------------------------------------------ > > Key: CXF-5837 > URL: https://issues.apache.org/jira/browse/CXF-5837 > Project: CXF > Issue Type: Bug > Components: JAX-RS > Affects Versions: 2.7.11 > Environment: Java 7, Tomcat 7 > Reporter: Sylvain Mougenot > Priority: Critical > > I'm using cxf to manage uploads within jax-rs application. > I used system properties to adjust behaviour on upload in order to limit size > to 10MB (10 * 1024 * 1024 = .10 485 760) > {code} > java .... > -Dorg.apache.cxf.io.CachedOutputStream.Threshold=102400 > -Dorg.apache.cxf.io.CachedOutputStream.OutputDirectory=/temp/upload > -Dorg.apache.cxf.io.CachedOutputStream.MaxSize=10485760 > ... > {code} > This works fine if the user send *files a little too big* (11MB for exemple) > : \\ client gets the http *status 413*. > But if the sent file is more than *twice bigger* than the limit (21MB for > exemple) it fails :\\ > client gets the http *status 500*. > The reason why seems to be in > *org.apache.cxf.transport.http.AbstractHTTPDestination#cacheInput*. > In my opinion, before writing the response out, this method is responsible > for reading the remains of the request. > But it does it the same way as when it tried to read attachement file : with > size limitations. Because the remaining datas are again bigger than the limit > (the file is more than twice too big) have an error. > Maybe, > * It would be nice to detect the status 413 (already set for the response). > So that we could just consume the data (without caching it at all). > * It would also be nice no to limit this consuming to a multiple of the value > "MaxSize" setting, not a hard coded 16MB. See code line 549 : > IOUtils.consume(in, 16 * 1024 * 1024) ;) > Sory, > I would have liked to submit a pullrequest (or patch) but I've no idea how to > find the status code inside the argument (Message outMessage). -- This message was sent by Atlassian JIRA (v6.2#6252)