Java 使用jersey和apache httpClient进行REST调用的不可重复请求异常

Java 使用jersey和apache httpClient进行REST调用的不可重复请求异常,java,rest,http,jersey,Java,Rest,Http,Jersey,我尝试使用Jersey(Moxy)通过REST上传文件。对于NTLM身份验证,我使用ApacheHttpClient库和Jersey Apache连接器 CredentialsProvider credProvider = new BasicCredentialsProvider(); credProvider.setCredentials(new AuthScope(host, port, AuthScope.ANY_REALM), new NTCredentials(use

我尝试使用Jersey(Moxy)通过REST上传文件。对于NTLM身份验证,我使用ApacheHttpClient库和Jersey Apache连接器

CredentialsProvider credProvider = new BasicCredentialsProvider();

credProvider.setCredentials(new AuthScope(host,
    port, AuthScope.ANY_REALM),
    new NTCredentials(user, pass, host, domain));

clientConfig.property(ApacheClientProperties.CREDENTIALS_PROVIDER,
    credProvider);
clientConfig.connectorProvider(new ApacheConnectorProvider());

client = ClientBuilder
    .newClient(clientConfig)
    .register(MultiPartFeature.class)
    .property(ClientProperties.SUPPRESS_HTTP_COMPLIANCE_VALIDATION, true);
包含文件内容的字节数组应与请求正文中的POST请求一起发送(无多部分请求/无其他数据)

当我使用REST资源来处理一个简单的POST请求时,它的主体是空的,一切都很好。但是,当我尝试发送文件时,出现以下错误:

javax.ws.rs.ProcessingException: org.apache.http.client.ClientProtocolException
    at org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:492)
    at org.glassfish.jersey.client.ClientRuntime.invoke(ClientRuntime.java:245)
[...]
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: org.apache.http.client.ClientProtocolException
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:188)
    at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:72)
    at org.glassfish.jersey.apache.connector.ApacheConnector.apply(ApacheConnector.java:446)
    ... 34 more
Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity.
    at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:207)
    at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:194)
    at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:85)
    at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:108)
    at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:186)
    ... 36 more
我尝试发送另一个实体,如JAXB处理的对象,以引发另一个异常。但同样的例外也发生了。没有jersey,我实现了一个工作请求

ByteArrayInputStream buffer = new ByteArrayInputStream(fileContent);
InputStreamEntity i = new InputStreamEntity(buffer, buffer.available());
BufferedHttpEntity entity = new BufferedHttpEntity(i);
HttpPost request = new HttpPost(new URI(targetUrl));
request.setEntity(entity);
//define some request headers here
client.execute(request);

但我喜欢使用jersey轻松处理响应内容。如何发送以文件数据为内容的工作POST请求?

使用修补程序请求时遇到类似问题。您找到解决方案了吗?使用补丁请求时遇到类似问题。你找到解决办法了吗?