We are trying to relay a FileRepresentation, and downloading directly from the 
Restlet server works fine.  I can do a manual cURL/wget and retrieve the whole 
file correctly.

However, when relaying the input stream through a Servlet it seems like the 
client socket is being reset.

                        Representation rep = 
myClient.get(MediaType.APPLICATION_OCTET_STREAM);

                        response.setContentType("application/octet-stream");
                        response.setHeader("Content-Disposition", "attachement; 
filename=\"" + fileName + "\"");
                        outStream = response.getOutputStream();
                        inStream = rep.getStream();
                        byte[] buffer = new byte[65535000];
                        int read = inStream.read(buffer, 0, 65535);
                        while (read != -1)
                        {
                                outStream.write(buffer, 0, read);
                                outStream.flush();
                                read = inStream.read(buffer, 0, 65535);
                        }
                        outStream.flush();
                        response.flushBuffer();


What we end up seeing on the server:

Caused by: java.nio.channels.ClosedChannelException
        at 
sun.nio.ch.SocketChannelImpl.ensureWriteOpen(SocketChannelImpl.java:135)
        at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:326)
        at org.simpleframework.transport.Appender.write(Appender.java:343)
        at org.simpleframework.transport.Appender.write(Appender.java:322)
        at org.simpleframework.transport.Appender.write(Appender.java:297)

And I'm not sure what's going wrong with our client where the socket connection 
to the Restlet server is being prematurely closed before the entire file has 
been transmitted.

Does anyone have any hints or suggestions?

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

Reply via email to