Java 使用jersey和apache httpClient进行REST调用的不可重复请求异常
我尝试使用Jersey(Moxy)通过REST上传文件。对于NTLM身份验证,我使用ApacheHttpClient库和Jersey Apache连接器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
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请求?使用修补程序请求时遇到类似问题。您找到解决方案了吗?使用补丁请求时遇到类似问题。你找到解决办法了吗?