Hi Zsolt, I think all chunk related issues were fixed during the last few days. We are about to release 1.1 RC1.
Please test again when you can and let us know if it still doesn't work, creating a bug report in Tigris.org if necessary. Best regards, Jérôme Louvel -- Restlet ~ Founder and Lead developer ~ http://www.restlet.org Noelios Technologies ~ Co-founder ~ http://www.noelios.com -----Message d'origine----- De : Zsolt Czinkos [mailto:[EMAIL PROTECTED] Envoyé : mardi 19 août 2008 18:02 À : [email protected] Objet : Re: PUT problem with restlet client Sorry, the exception on the client side: 2008.08.19. 17:59:32 com.noelios.restlet.http.HttpClientCall sendRequest WARNING: An error occured during the communication with the remote HTTP server. java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92) at java.net.SocketOutputStream.write(SocketOutputStream.java:136) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65) at java.io.BufferedOutputStream.write(BufferedOutputStream.java:109) at com.noelios.restlet.http.ChunkedOutputStream.writeBuffer(ChunkedOutputStream .java:136) at com.noelios.restlet.http.ChunkedOutputStream.writeChunk(ChunkedOutputStream. java:148) at com.noelios.restlet.http.ChunkedOutputStream.write(ChunkedOutputStream.java: 124) at java.io.OutputStream.write(OutputStream.java:99) at org.restlet.util.ByteUtils.write(ByteUtils.java:860) at org.restlet.resource.InputRepresentation.write(InputRepresentation.java:124) at com.noelios.restlet.http.HttpClientCall.sendRequest(HttpClientCall.java:446) at com.noelios.restlet.http.StreamClientCall.sendRequest(StreamClientCall.java: 332) at com.noelios.restlet.http.HttpClientConverter.commit(HttpClientConverter.java :419) at com.noelios.restlet.http.HttpClientHelper.handle(HttpClientHelper.java:108) at org.restlet.Client.handle(Client.java:157) at org.restlet.Uniform.handle(Uniform.java:106) at org.restlet.Uniform.put(Uniform.java:213) at hu.zakk.atom.server.TestResourceTest.testPut(TestResourceTest.java:29) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98) at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79) at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodR oadie.java:87) at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77) at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42) at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRun ner.java:88) at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.ja va:51) at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44 ) at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27) at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37) at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRef erence.java:45) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3 8) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:460) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:673) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:386) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner .java:196) 2008.08.19. 17:59:32 com.noelios.restlet.http.HttpClientCall getResponseEntity INFO: The length of the message body is unknown. The entity must be handled carefully and consumed entirely in order to surely release the connection. Thank you zsolt On Tue, Aug 19, 2008 at 5:55 PM, Zsolt Czinkos <[EMAIL PROTECTED]> wrote: > Hello > > > I'd like to send HTTP 412 (precondition faild) status to client. It > works when I test it from curl (even if repeated a hundred times). > When I test is from a junit test using the restlet client, the test fails: > > ------- > java.lang.AssertionError: expected:<Precondition Failed (412) - The > precondition given in one or more of the request header fields > evaluated to false when it was tested on the server> but > was:<Communication Error (1001) - Software caused connection abort: > socket write error> > at org.junit.Assert.fail(Assert.java:74) > at org.junit.Assert.failNotEquals(Assert.java:448) > at org.junit.Assert.assertEquals(Assert.java:102) > at org.junit.Assert.assertEquals(Assert.java:117) > at hu.zakk.atom.server.TestResourceTest.testPut(TestResourceTest.java:30) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39 ) > at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl .java:25) > at java.lang.reflect.Method.invoke(Method.java:597) > at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:59) > at org.junit.internal.runners.MethodRoadie.runTestMethod(MethodRoadie.java:98) > at org.junit.internal.runners.MethodRoadie$2.run(MethodRoadie.java:79) > at org.junit.internal.runners.MethodRoadie.runBeforesThenTestThenAfters(MethodR oadie.java:87) > at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:77) > at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:42) > at org.junit.internal.runners.JUnit4ClassRunner.invokeTestMethod(JUnit4ClassRun ner.java:88) > at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.ja va:51) > at org.junit.internal.runners.JUnit4ClassRunner$1.run(JUnit4ClassRunner.java:44 ) > at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:27) > at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:37) > at org.junit.internal.runners.JUnit4ClassRunner.run(JUnit4ClassRunner.java:42) > at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestRef erence.java:45) > at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:3 8) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:460) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRu nner.java:673) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner. java:386) > at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner .java:196) > ----- > > > According to the server log, everything is ok, 412 status sent: > > > 2008.08.19. 17:43:44 com.noelios.restlet.LogFilter afterHandle > INFO: 2008-08-19 17:43:44 127.0.0.1 - 127.0.0.1 8182 PUT /test/ - 412 391 - 0 http://localhost:8182 Noelios-Restlet-Engine/1.1.snapshot - > > > > When I use smaller file to test, it seems to work, but occasionally it > fails. If I increase the of the file above 64k, it seems to fail every > time. > > See the java classes below. I use the restlet snapshot from maven repo > with jetty. > > Probably a client issue? > > Thanks > > Zsolt > > > > > -------------------------------- > The resource class: > > > package hu.zakk.test; > > import java.util.List; > import java.util.logging.Logger; > > import org.restlet.Context; > import org.restlet.data.MediaType; > import org.restlet.data.Request; > import org.restlet.data.Response; > import org.restlet.data.Status; > import org.restlet.data.Tag; > import org.restlet.resource.Representation; > import org.restlet.resource.Resource; > import org.restlet.resource.ResourceException; > import org.restlet.resource.Variant; > > public class TestResource extends Resource { > > private Logger log; > > public TestResource(Context context, Request request, Response response) { > super(context, request, response); > getVariants().add(new Variant(MediaType.ALL)); > log = getLogger(); > } > > @Override > public void storeRepresentation(Representation entity) > throws ResourceException { > > String tag = "fake"; > List<Tag> match = getRequest().getConditions().getMatch(); > Tag etag = match.isEmpty() ? null : match.get(0); > if (etag == null || !etag.toString().equals(tag)) { > log.info("precondition failed"); > getResponse().setStatus(Status.CLIENT_ERROR_PRECONDITION_FAILED); > return; > } > log.info("NEVER HIT THIS"); > } > > @Override > public boolean allowPut() { > return true; > } > } > > > ----------------------- > > The test: > > > package hu.zakk.test; > > import static org.junit.Assert.assertEquals; > > import java.io.ByteArrayInputStream; > > import org.junit.Test; > import org.restlet.Client; > import org.restlet.data.MediaType; > import org.restlet.data.Protocol; > import org.restlet.data.Response; > import org.restlet.data.Status; > import org.restlet.resource.InputRepresentation; > > public class TestResourceTest { > > @Test > public void testPut() { > // play with size > int size = (int) Math.pow(2, 15) + 1; > byte[] buf = new byte[size]; > for (int i = 0; i < size; i++) { > buf[i] = 1; > } > > ByteArrayInputStream bain = new ByteArrayInputStream(buf); > > Client client = new Client(Protocol.HTTP); > Response putResponse = client.put("http://localhost:8182/test/", > new InputRepresentation(bain, MediaType.TEXT_PLAIN)); > assertEquals(Status.CLIENT_ERROR_PRECONDITION_FAILED, > putResponse.getStatus()); > } > > > > } >

