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

Julian Reschke commented on JCR-3240:
-------------------------------------

a) Jackrabbit not looking at the input stream for PROPFIND is strange; we 
should find out what's going on here.

b) Jetty re-using the stream is weird; I'd be surprised if the servlet spec 
allows that behavior...
                
> Wrong Content-Type when uploading via MAC OS Webdav client
> ----------------------------------------------------------
>
>                 Key: JCR-3240
>                 URL: https://issues.apache.org/jira/browse/JCR-3240
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-jcr-server
>    Affects Versions: 2.2.5
>         Environment: Jetty 6.1.22, Mac OS X Webdav Client: "WebDAVFS/1.8.3 
> (01838000) Darwin/10.8.0 (x86_64)"
>            Reporter: ZFabrik
>
> The problem seems to be caused by the way Jetty and Jackrabbit interoperates 
> with each other conditioned by a peculiarity of the MAC OS Webdav client:
> 0) Jetty resuses the request input-stream instance: 
> org.mortbay.jetty.HttpParser$Input for new requests.
> 1) A PROPFIND arrives with Content-Length=123 for example. It seems however 
> that Jackrabbit is not interested into the xml content at all.
> 2) A PUT arrives with Content-Length=0 (seem to be a peculiarity of the MAC 
> OS Webdav client, I have no clue why MAC OS is doing this. The real payload 
> will be send a "few" requests later within another PUT).
> 3) Jetty reuses the InputStream which contains the xml content from the 
> previous PROPFIND request!
> 4) Jackrabbit uses Apache Tika in order to sleuth the content type and finds 
> the xml from the previous request (ignoring the fact the the Content-Length 
> is 0)
> The workaround I found proves my findings. I extended Jackrabbit's 
> org.apache.jackrabbit.j2ee.SimpleWebdavServlet
> containing an overwritten service() method:
>     @Override
>     protected void service(HttpServletRequest request, HttpServletResponse 
> response) throws ServletException, IOException {
>       super.service(request, response);
>       
>       // make sure input stream is eaten up
>       ServletInputStream ins = request.getInputStream();
>       while (ins.read() != -1);
>     }
> Now the input-stream is always eaten up so that the following request will 
> get a clean input-stream.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to