users@jersey.java.net

Re: [Jersey] read time-out when processing form post

From: Craig McClanahan <Craig.McClanahan_at_Sun.COM>
Date: Tue, 03 Mar 2009 00:36:32 -0800

Michael Mogley wrote:
> I am trying to process a simple post request. Whenever I invoke the
> post, I get a 'read timed out' error from Jersey.
What kind of client are you sending the request with? Since the timeout
occurs on the server side, that implies something like maybe the client
is not flushing its output stream to actually complete sending of the
request ... but there's no way to know for sure without more information.

Craig
> I've browsed the mailing list for similar issues. One appeared
> related, but in my case, Tomcat has no valves enabled. My rest method is:
>
> @Consumes("application/x-www-form-urlencoded")
> @POST @Path("/storeHoursProfile/add")
> @Produces("text/html")
> public String addProfile(@FormParam("groupId") Long groupId,
> @FormParam("fromDate") String fromDateString, @FormParam("toDate")
> String toDateString, @FormParam("fromTime") String fromTimeString,
> @FormParam("toTime") String toTimeString)
> {
> String response = PlainTextResponseCode.OK;
>
> ....
>
> return response;
> }
>
> The Jersey stack-trace:
>
> java.net.SocketTimeoutException: Read timed out
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.read(SocketInputStream.java:129)
> at
> org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:746)
> at
> org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:776)
> at
> org.apache.coyote.http11.filters.IdentityInputFilter.doRead(IdentityInputFilter.java:116)
> at
> org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:705)
> at org.apache.coyote.Request.doRead(Request.java:428)
> at
> org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:304)
> at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:405)
> at
> org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:327)
> at
> org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:193)
> at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
> at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
> at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
> at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264)
> at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306)
> at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158)
> at java.io.InputStreamReader.read(InputStreamReader.java:167)
> at java.io.Reader.read(Reader.java:123)
> at
> com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.readFromAsString(AbstractMessageReaderWriterProvider.java:89)
> at
> com.sun.jersey.core.impl.provider.entity.FormProvider.readFrom(FormProvider.java:76)
> at
> com.sun.jersey.core.impl.provider.entity.FormProvider.readFrom(FormProvider.java:63)
> at
> com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:391)
> at
> com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:400)
> at
> com.sun.jersey.server.impl.model.method.dispatch.FormDispatchProvider.processForm(FormDispatchProvider.java:76)
> at
> com.sun.jersey.server.impl.model.method.dispatch.FormDispatchProvider$FormParamInInvoker.getParams(FormDispatchProvider.java:91)
> at
> com.sun.jersey.server.impl.model.method.dispatch.FormDispatchProvider$TypeOutInvoker._dispatch(FormDispatchProvider.java:132)
> at
> com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:67)
>
> Is there something I'm not understanding here? I should not that GET
> requests are mapped to corresponding REST methods without a hitch.
>
> I'm on Jersey 1.0.2 / Tomcat 6.0.18.
>
> Thanks for any help.
>
> Michael