[ 
https://issues.apache.org/jira/browse/JCR-2009?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jukka Zitting updated JCR-2009:
-------------------------------


Merged to the 1.5 branch in revision 767534. 

> Large file download over webdav causes exception
> ------------------------------------------------
>
>                 Key: JCR-2009
>                 URL: https://issues.apache.org/jira/browse/JCR-2009
>             Project: Jackrabbit Content Repository
>          Issue Type: Bug
>          Components: jackrabbit-webdav
>    Affects Versions: 1.5.2
>         Environment: Mac OS X 10.5.6, Java 1.5.0_16
>            Reporter: Greg Schueler
>            Assignee: angela
>             Fix For: 1.5.5
>
>
> Downloading a large file (>2GB) from webdav causes an exception.
> (Note: uploading the file works ok, when jackrabbit is configured to use the 
> filesystem DataStore.)
> When trying to retrieve the file with e.g. "wget", we get the following error:
> Gozer:Desktop greg$ wget --http-user=xxx --http-passwd=xxx 
> http://localhost:8080/jackrabbit/repository/workbench/pkgs/demo/zip/zips/largetest-1.zip
> --08:59:50--  
> http://localhost:8080/jackrabbit/repository/workbench/pkgs/demo/zip/zips/largetest-1.zip
>            => `largetest-1.zip'
> Resolving localhost... done.
> Connecting to localhost[127.0.0.1]:8080... connected.
> HTTP request sent, awaiting response... 500 For input string: "3156213760"
> 09:04:53 ERROR 500: For input string: "3156213760".
> In the server log we see this:
> 06.03.2009 08:59:50 *INFO * RepositoryImpl: SecurityManager = class 
> org.apache.jackrabbit.core.security.simple.SimpleSecurityManager 
> (RepositoryImpl.java, line 432)
> 2009-03-06 09:04:53.822::WARN:  
> /jackrabbit/repository/workbench/pkgs/demo/zip/zips/largetest-1.zip
> java.lang.NumberFormatException: For input string: "3156213760"
>       at 
> java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
>       at java.lang.Integer.parseInt(Integer.java:459)
>       at java.lang.Integer.parseInt(Integer.java:497)
>       at 
> org.apache.jackrabbit.webdav.io.OutputContextImpl.setContentLength(OutputContextImpl.java:60)
>       at 
> org.apache.jackrabbit.server.io.ExportContextImpl.informCompleted(ExportContextImpl.java:192)
>       at 
> org.apache.jackrabbit.server.io.IOManagerImpl.exportContent(IOManagerImpl.java:157)
>       at 
> org.apache.jackrabbit.webdav.simple.DavResourceImpl.spool(DavResourceImpl.java:332)
>       at 
> org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.spoolResource(AbstractWebdavServlet.java:422)
>       at 
> org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.doGet(AbstractWebdavServlet.java:388)
>       at 
> org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.execute(AbstractWebdavServlet.java:229)
>       at 
> org.apache.jackrabbit.webdav.server.AbstractWebdavServlet.service(AbstractWebdavServlet.java:196)
>       at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
>       at 
> org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:502)
>       at 
> org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:363)
>       at 
> org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
>       at 
> org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:181)
>       at 
> org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766)
>       at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:417)
>       at 
> org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230)
>       at 
> org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114)
>       at 
> org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
>       at org.mortbay.jetty.Server.handle(Server.java:324)
>       at 
> org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:534)
>       at 
> org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:864)
>       at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:533)
>       at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:207)
>       at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:403)
>       at 
> org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409)
>       at 
> org.mortbay.thread.BoundedThreadPool$PoolThread.run(BoundedThreadPool.java:451)
> The problem seems to lie in OutputContextImpl.java it makes the mistake of 
> potentially trying to parse a Long as an Integer, here: 
> http://svn.apache.org/repos/asf/jackrabbit/trunk/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/io/OutputContextImpl.java
> in the method setContentLength(long contentLength):
> public void setContentLength(long contentLength) {
>        int length = Integer.parseInt(contentLength + "");
>        if (length >= 0) {
>            response.setContentLength(length);
>        }
>    }
> I'm not sure, but a fix might be like this:
> public void setContentLength(long contentLength) {
>        if(contentLength <= Integer.MAX_VALUE && contentLength >= 0) {
>            response.setContentLength((int) contentLength);
>        }else if (contentLength >  Integer.MAX_VALUE) {
>             response.addHeader("Content-Length", 
> Long.toString(contentLength));
>        }
>    }
> This would at least set the Content-Length header, and in some preliminary 
> tests does seem to allow downloading the files.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to