[ 
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)

Reply via email to