Unable to retry request with non-repeating request object

I use the java-http client library and Apache Transport with it on the client side and Rails on the server side. From time to time an error occurs:

11-24 17:37:02.469: WARN/BaseActivity(5925): org.apache.http.client.ClientProtocolException at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:557) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465) at com.google.api.client.http.apache.ApacheHttpRequest.execute(ApacheHttpRequest.java:58) at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:639) at com.sk.api.SkClient.updateUser(SkClient.java:157) at com.sk.api.SkClient$3.call(SkClient.java:76) at com.sk.api.SkClient$3.call(SkClient.java:71) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581) at java.lang.Thread.run(Thread.java:1019) Caused by: org.apache.http.client.NonRepeatableRequestException: Cannot retry request with a non-repeatable request entity at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:413) at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) ... 12 more 

What should I do to avoid this?

+7
source share
2 answers

I have a similar error because I used CountingInputStreamEntity, which is a unique http client. The solution was to use BufferedHttpEntity, which converted nonrepeatable to re-httpclient.

 ParcelFileDescriptor fileDescriptor = this.getContentResolver().openFileDescriptor(uri, "r"); InputStream in = this.getContentResolver().openInputStream(uri); CountingInputStreamEntity entity = new CountingInputStreamEntity(in, fileDescriptor.getStatSize()); entity.setUploadListener(this); entity.setContentType("binary/octet-stream"); entity.setChunked(true); BufferedHttpEntity myEntity = null; try { myEntity = new BufferedHttpEntity(entity); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } put.setEntity(myEntity); 

Excuse me for my bad english

+13
source

I solved this as folllows:

 MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create(); entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE); ContentType contentType = ContentType.create("image/jpeg", Consts.ISO_8859_1); entityBuilder.addBinaryBody(PARAM_ATTACHMENT, new File(filepath), contentType, StringUtils.getFileName(filepath)); 
0
source

All Articles