chemistry-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Florian Müller (JIRA) <j...@apache.org>
Subject [jira] [Commented] (CMIS-844) POSTHttpServletRequestWrapper should accommodate prior consumption of request body by a filter
Date Mon, 22 Sep 2014 14:05:33 GMT

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

Florian Müller commented on CMIS-844:
-------------------------------------

I have a hunch that there are not many correctly behaving filters. In fact, OpenCMIS does
only half of what it should do. It should also take the charset in the content type and the
parameter "_charset_" into account. (I'm working on that.) I guess no filter is doing that
today.
If a filter does its own parsing anyway, it can save the original stream and provided it with
a ServletRequestWrapper to OpenCMIS. That would allow OpenCMIS to do the decoding independently
of the filter.

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

Mime
View raw message