Jersey Client(2.4) - PUT InputStream但Content-Length = 0

时间:2014-01-03 20:06:05

标签: java apache-httpclient-4.x put jersey-2.0 jersey-client

我正在尝试向使用Jersey REST service方法接受InputStream作为实体的PUT发出请求。

当我这样做时,Jersey客户端将Content-Length标头设置为0。

REST服务要求Content-Length设置为流的实际大小(IE是文件的大小),但是,每当我尝试设置Content-Length客户端抛出时:< / p>

  

org.apache.http.ProtocolException:Content-Length标头已经存在   本

要注意 - 当我添加Content-Length标头时,不会抛出异常(此时,此标头不存在),当Jersey / Apache HTTPClient尝试添加{时,它会被抛出(我假设)稍后{1}}标题值。

如果有任何帮助则堆叠:

  

引起:org.apache.http.client.ClientProtocolException       在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:909)       在org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:827)       在org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:326)       ......还有40多个

     

引起:org.apache.http.ProtocolException:Content-Length标头   已经出现在   org.apache.http.protocol.RequestContent.process(RequestContent.java:96)     在   org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:109)     在   org.apache.http.protocol.HttpRequestExecutor.preProcess(HttpRequestExecutor.java:176)     在   org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:518)     在   org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:906)     ......还有42个

所以,为什么0Jersey / Apache HTTP Client标头设置为0的任何想法,以及为什么我无法覆盖Content-Length标题

我正在使用:

带有Content-Length

Jersey 2.4.1

提前致谢

威尔

1 个答案:

答案 0 :(得分:-1)

回答这个问题:

这是ApacheConnector的问题,对于内容的大小,它总是返回-1,确保永远不会设置此值。 (这是在getHttpEntity方法中硬编码的)

因此,如果需要内容长度标头,则必须按照here所述重新实现ApacheConnector,或使用其他连接器。

我在Jersey jira报道过这个。

https://java.net/jira/browse/JERSEY-2373