Forgot to mention the vewrsion:
I tried it in 2.1.1 and 2.2 SNAPSHOT

I am currently trying to stream files from my restlet application.
The following works:
File theFileToDownload = new File("test.mp3");
        FileRepresentation rep = new FileRepresentation(theFileToDownload, 
MediaType.APPLICATION_OCTET_STREAM);
        Disposition disp = new Disposition(Disposition.TYPE_ATTACHMENT);
        disp.setFilename(theFileToDownload.getName());
        disp.setSize(theFileToDownload.length());
        rep.setDisposition(disp);
        return rep;

Now I tried switching to JAX RS using:
File file = new File("test.mp3");

        Response.ResponseBuilder response = Response.ok((Object) file);
        response.header("Content-Disposition",
                "attachment; filename=new-android-book.mp3");
        return response.build();

Accessing the ressource causes Restlet to throw the following exception and 
stop the download:
java.io.IOException: Timeout while writing to the queue-based output stream
        at org.restlet.engine.io.PipeStream$2.write(PipeStream.java:108)
        at java.io.OutputStream.write(OutputStream.java:99)
        at java.io.OutputStream.write(OutputStream.java:58)
        at 
org.restlet.ext.jaxrs.internal.provider.ByteArrayProvider.writeTo(ByteArrayProvider.java:96)
        at 
org.restlet.ext.jaxrs.internal.provider.ByteArrayProvider.writeTo(ByteArrayProvider.java:55)
        at 
org.restlet.ext.jaxrs.internal.wrappers.provider.SingletonProvider.writeTo(SingletonProvider.java:350)
        at 
org.restlet.ext.jaxrs.internal.util.JaxRsOutputRepresentation.write(JaxRsOutputRepresentation.java:112)
        at org.restlet.engine.io.BioUtils$1.run(BioUtils.java:331)
        at org.restlet.service.TaskService$1$1.run(TaskService.java:135)
        at 
java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:98)
        at 
java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:206)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at 
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:680)


This happens with all variations of trying to get files streamed through JAX RS 
like:

File file = new File("test.mp3");
        ByteArrayOutputStream byteArrayOutputStream = new 
ByteArrayOutputStream();
        FileInputStream fileInputStream = new FileInputStream(file);

        byte[] buffer = new byte[16384];

        for (int len = fileInputStream.read(buffer); len > 0; len = 
fileInputStream
                .read(buffer)) {
            byteArrayOutputStream.write(buffer, 0, len);
        }

        fileInputStream.close();
        return Response.ok(byteArrayOutputStream.toByteArray()).build();

Any suggestions on what I might do wrong?

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=3046388

Reply via email to