[ 
https://issues.apache.org/jira/browse/CMIS-844?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14142683#comment-14142683
 ] 

Ron Gavlin commented on CMIS-844:
---------------------------------

My patch only addresses the case where the POST request inputStream has already 
been consumed by a prior filter. In this case, its the prior filter's 
responsibility to decode the inputStream values correctly using UTF-8 and 
populate the parameterMap accordingly. This is outside the scope of the 
POSTHttpServletRequestWrapper.

My patch proposes that the POSTHttpServletRequestWrapper accommodate correctly 
behaving filters. I think my patch does no harm when the inputStream has not 
already been consumed and delivers useful functionality when the inputStream 
has been consumed. Specifically, it provides useful backwards compatibility 
with the prior 0.7.0 release. Thoughts?

> POSTHttpServletRequestWrapper should accommodate prior consumption of request 
> body by a filter
> ----------------------------------------------------------------------------------------------
>
>                 Key: CMIS-844
>                 URL: https://issues.apache.org/jira/browse/CMIS-844
>             Project: Chemistry
>          Issue Type: Bug
>          Components: opencmis-server
>    Affects Versions: OpenCMIS 0.12.0
>            Reporter: Ron Gavlin
>            Assignee: Florian Müller
>
> POSTHttpServletRequestWrapper should accommodate prior consumption of the 
> request body by a filter.
> The 0.7.0 release provided this accommodation. This appears to have been 
> broken by the major post-0.7.0 refactoring.
> The following POSTHttpServletRequestWrapper constructor modification fixes 
> the problem:
> {code}
> ...
>         if (isMultipart) {
> ...
>         } else {
>             // form data processing
>             StringBuilder sb = new StringBuilder();
>             InputStreamReader sr = new 
> InputStreamReader(request.getInputStream(), IOUtils.UTF8);
>             char[] buffer = new char[4096];
>             int c = 0;
>             while ((c = sr.read(buffer)) > -1) {
>                 sb.append(buffer, 0, c);
>             }
>             if (sb.length() < 3) {
>                 @SuppressWarnings("unchecked")
>                 Map<String, String[]> parameterMap = 
> request.getParameterMap();
>                 getParameterMap().putAll(parameterMap);
>             } else {
>                 parseFormData(sb.toString());
>             }
>         }
> ...
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to