Kar*_*roy 4 rest post json jetty jersey
使用Jersey 2.4作为REST servlet获得Jetty 8.1:
<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>
Run Code Online (Sandbox Code Playgroud)
GET响应工作正常,但是当我尝试POST时,从Jetty看到这个奇怪的错误:
WARN oejserver.AbstractHttpConnection - 标头已满:java.lang.RuntimeException:Header> 6144
客户端只看到没有详细信息的HTTP 500响应:
信息:1*LoggingFilter - 在主线程
1 上收到的请求> PUThttp://localhost:8080/rest/doPOST
1>接受:application/json
1> Content-Type:application/json
{"name":"Kris Kringle","trkNbr":"585802240942","rptDt ":空," reqType ":"细节"}2013年11月19日12:59:49 org.glassfish.jersey.filter.LoggingFilter log
INFO:2*LoggingFilter - 线程主
2 上收到的响应<500
2 <Content-Length:0
2 <Server:Jetty(8.1.13 .v20130916)线程"main"中的异常javax.ws.rs.InternalServerErrorException: org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:929)中的
HTTP 500服务器错误
请求是这样的{在目标之后}:
TestPOJO responseMsg = target.path("/rest/doPOST")
.request(MediaType.APPLICATION_JSON)
.put(Entity.json(reqPOJO), TestPOJO.class);
Run Code Online (Sandbox Code Playgroud)
在Jetty的日志中没有细节,它似乎没有进入Jersey servlet.
错误header full: java.lang.RuntimeException: Header>6144
意味着您的响应标头大小超过6144字节.标头容量为6144字节,生成的标头超出了它.
为什么选择6144?好吧,这是根据您的Buffers
实施计算的.
Buffers
您使用的是什么实现?这取决于Connector
你正在使用的.
你可以AbstractConnector.setResponseHeaderSize(int)
为自己设置更大的东西.
如果您使用独立Jetty,请修改您etc/jetty.xml
的以下内容...
...
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
...
<Set name="responseHeaderSize">10000</Set>
...
</New>
</Arg>
</Call>
...
Run Code Online (Sandbox Code Playgroud)
这是一个快速和肮脏的修复您的情况.
我鼓励你找出为什么你有一个大小的响应头!这不正常,可能表明你有一个更广泛和根本的问题.
捕获整个HTTP事务请求+响应,使用wireshark捕获jersey-client和服务器之间的流量.
注意:可能无法从您正在进行的特定调用中看到此错误响应标头,因为Jetty将无法生成标头(因此出现错误)并回退到默认的500错误响应.一旦增加了responseHeaderSize,它就可以开始正常生成,此时你可以捕获并查看它.
归档时间: |
|
查看次数: |
3103 次 |
最近记录: |