Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[jetty-users] HttpGenerator sometimes abandons chunked mode and returns a malformed chunk (without length & new line characters)

Hi,

In our app we're using Jetty server v. 8.1.5.v20120716 and deploying a
Servlet 3.0 API compliant code onto it. From time to time (extremely
rarely) the server generates a malformed HTTP response. One of the
chunks created by HttpGenerator lacks length and line characters.
We're only able to reproduce this behavior in long running tests of
our app. We haven't yet succeeded in creating a test case that would
show this behavior.

I've looked at past tickets and JIRAs and found:
http://jira.codehaus.org/browse/JETTY-586
https://bugs.eclipse.org/bugs/show_bug.cgi?id=363757
https://bugs.eclipse.org/bugs/show_bug.cgi?id=367608

367608 is the most interesting one! We're using the pattern that is
mentioned there and is/was said not to be recommended:
dispatch
   {
      suspend
      spawn
      {
         write
         complete
      }
   }

At the same time, we're using the recommended pattern:
dispatch
   {
      suspend
      spawn
      {
         resume
      }
   }
   dispatch
   {
      write
   }
in a completely different scenario (CXF services deployed using CXF
servlet onto Jetty server v. 8.1.5.v20120716). Looked at CXF sources
and indeed it uses the recommended pattern. The same long running
tests are run against this CXF-based scenario. Issues have NEVER been
observed. HttpGenerator was always behaving well.

Is the former pattern still discouraged? Any clues how to get rid of
these issues (other than switching to the latter pattern :-))?

Below is a sample response returned by the server and an exception
that this response generates on the client side.

Thanks!
  Bartek
----------------------------------------------------------------------------------------------------

Response returned by the server:

*** part #1
-------------------------
HTTP/1.1 400 Bad Request
Content-Type: text/xml;charset=UTF-8
Transfer-Encoding: chunked
Server: Jetty(8.1.5.v20120716)

26
<?xml version="1.0" encoding="UTF-8"?>

-------------------------

*** part #2 - the malformed one

-------------------------
<error xmlns="http://blaah.com/gw";><tid>1f7ff12c-0d24-4de4-b2d0-bc7e940ce2b6</tid><message><![CDATA[Unable
to identify Blaah customer name. Please
-------------------------

*** part #3

-------------------------

38
 use the Blaah-Customer HTTP header]]></message></error>
-------------------------

*** part #4

-------------------------
0


-------------------------


HTTP parser on the client side:

HttpExchange - EXCEPTION
ContentExchange@3d3473=POST//localhost:7785/unknown/notReally#CONTENT(40ms)->EXCEPTED(0ms)sent=88ms
java.io.IOException: bad chunk char: 60
	at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:905)
~[jetty-http-8.1.5.v20120716.jar:8.1.5.v20120716]
	at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:230)
~[jetty-http-8.1.5.v20120716.jar:8.1.5.v20120716]
	at org.eclipse.jetty.client.AsyncHttpConnection.handle(AsyncHttpConnection.java:126)
~[jetty-client-8.1.5.v20120716.jar:8.1.5.v20120716]
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:622)
[jetty-io-8.1.5.v20120716.jar:8.1.5.v20120716]
	at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:46)
[jetty-io-8.1.5.v20120716.jar:8.1.5.v20120716]
	at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:603)
[jetty-util-8.1.5.v20120716.jar:8.1.5.v20120716]
	at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:538)
[jetty-util-8.1.5.v20120716.jar:8.1.5.v20120716]
	at java.lang.Thread.run(Thread.java:722) [na:1.7.0_05]


Back to the top