The problem appears to be in HttpClientCall.sendRequest(). After it finishes writing the request entity, it closes the request outputstream. According to the javadocs, this closes the socket as well:
http://java.sun.com/javase/6/docs/api/java/net/Socket.html#getOutputStream() The close should be done at a later point. Kevin On Dec 11, 2007 3:32 PM, Kevin Conaway <[EMAIL PROTECTED]> wrote: > I'm experiencing a SocketException everytime I try to send a > representation using PUT. > > The error I receive is: > > java.net.SocketException: socket closed > at java.net.SocketInputStream.socketRead0(Native Method) > at java.net.SocketInputStream.read(SocketInputStream.java:129) > at java.net.SocketInputStream.read(SocketInputStream.java:182) > at com.noelios.restlet.http.StreamClientCall.parseResponse( > StreamClientCall.java :120) > at com.noelios.restlet.http.StreamClientCall.sendRequest( > StreamClientCall.java:232) > at com.noelios.restlet.http.HttpClientConverter.commit( > HttpClientConverter.java:100) > at com.noelios.restlet.http.HttpClientHelper.handle ( > HttpClientHelper.java:79) > at org.restlet.Client.handle(Client.java:103) > at org.restlet.Uniform.handle(Uniform.java:97) > at PutTest.call(PutTest.java:16) > at PutTest.main(PutTest.java :10) > > Here is a short sample application that will reproduce the error on the > latest 1.1M1 build. Anyone know whats going on? > > Thanks, > > Kevin > > import org.restlet.*; > import org.restlet.data.*; > import org.restlet.resource.*; > > public class PutTest { > > public static void main(String [] args) throws Exception { > startServer(); > call(null); //Succeeds > call(new StringRepresentation("Test")); //Fails > } > > public static void call(Representation entity) { > String uri = "http://localhost:8000/test/"; > Request request = new Request( Method.PUT, uri, entity); > new Client(Protocol.HTTP).handle(request); > } > > public static void startServer() throws Exception { > Component component = new Component(); > component.getServers ().add(Protocol.HTTP, 8000); > > Application application = new Application(component.getContext()) > { > public Restlet createRoot() { > Router router = new Router(getContext()); > router.attach("", PutResource.class); > return router; > } > }; > > component.getDefaultHost().attach("/test/", application); > component.start(); > } > > public static class PutResource extends Resource { > public boolean allowPut() { > return true; > } > > public void storeRepresentation(Representation entity) { > System.out.println("Put called"); > } > } > } >

