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