Feeling stupid - client connection gets closed early when relaying from network

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view

Feeling stupid - client connection gets closed early when relaying from network

Rob Elsner
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.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);
                                read = inStream.read(buffer, 0, 65535);

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?