OK. I'll checkout the latest from SVN.

Thanks.

zsolt

On Tue, Aug 19, 2008 at 6:18 PM, Jerome Louvel
<[EMAIL PROTECTED]> wrote:
>
> 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());
>>  }
>>
>>
>>
>> }
>>
>
>

Reply via email to