繁体   English   中英

泽西岛客户端(2.4)-PUT InputStream但内容长度= 0

[英]Jersey Client (2.4) - PUT InputStream but Content-Length = 0

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

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

REST服务要求将Content-Length设置为流的实际大小(即文件的大小),但是,每当我尝试设置Content-Length ,客户端都会抛出:

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

注意-添加Content-Length标头时不会引发异常(此时该标头不存在),当Jersey / Apache HTTPClient尝试添加0标头值时,将引发(我假设)此异常。

堆叠是否有帮助:

造成原因:org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:909)的org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.org)上的org.apache.http.client.ClientProtocolException java:827),网址为org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:326)...还有40

由以下原因引起:org.apache.http.ProtocolException:Content-Length标头已存在于org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor)上的org.apache.http.protocol.RequestContent.process(RequestContent.java:96) .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

因此,所有关于为何Jersey / Apache HTTP ClientContent-Length标头设置为0,以及为什么我无法覆盖Content-Length标头的想法

我正在使用:

带有ApacheConnector Jersey 2.4.1

提前致谢

只是为了回答这个问题:

这是ApacheConnector的问题,它将始终为内容的大小返回-1,以确保从未设置此值。 (这在getHttpEntity方法中进行了硬编码)

因此,如果需要的Content-Length头,一个或者具有重新实现ApacheConnector如所描述的此处或使用不同的连接器。

我已经在泽西岛吉拉报道了这一点。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM