Got Jetty 8.1 with Jersey 2.4 as the REST servlet:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>org.foo.rest;org.bar.rest</param-value>
</init-param>
The GET responses work just fine, but when I try a POST, this strange error is seen from Jetty:
WARN o.e.j.server.AbstractHttpConnection - header full: java.lang.RuntimeException: Header>6144
The client sees only an HTTP 500 response with no details:
INFO: 1 * LoggingFilter - Request received on thread main
1 > PUThttp://localhost:8080/rest/doPOST
1 > Accept: application/json
1 > Content-Type: application/json
{"name":"Kris Kringle","trkNbr":"585802240942","rptDt":null,"reqType":"detail"}Nov 19, 2013 12:59:49 PM org.glassfish.jersey.filter.LoggingFilter log
INFO: 2 * LoggingFilter - Response received on thread main
2 < 500
2 < Content-Length: 0
2 < Server: Jetty(8.1.13.v20130916)Exception in thread "main" javax.ws.rs.InternalServerErrorException:
HTTP 500 Server Error
at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:929)
The request is made like this {after the target}:
TestPOJO responseMsg = target.path("/rest/doPOST")
.request(MediaType.APPLICATION_JSON)
.put(Entity.json(reqPOJO), TestPOJO.class);
No details in Jetty's log and it doesn't seem it ever makes it to the Jersey servlet.
The error about
header full: java.lang.RuntimeException: Header>6144
means that your response header was over 6144 bytes in size. The header capacity was at 6144 bytes and your generated header exceeded it.Why 6144? well, that's calculated based on your
Buffers
implementation.What
Buffers
implementation are you using? That is determined by theConnector
you are using.You can set your
AbstractConnector.setResponseHeaderSize(int)
to something larger for yourself.If you are using standalone Jetty, modify your
etc/jetty.xml
to have the following ...This is a quick and dirty fix for your situation.
I encourage you to find out why you have a response header that size! That's not normal and could indicate that you have a much wider and fundamental issue.
Capture the entire HTTP transaction request + response, use wireshark to capture the traffic between jersey-client and the server.
Note: it might not be possible to see this bad response header from the specific call you are making, as Jetty will fail to generate the header (hence the error) and falls back to a default 500 error response. Once you increase your responseHeaderSize it might start generating properly, at which point you can capture and look at it.