diff --git a/src/org/opendatakit/briefcase/reused/http/CommonsHttp.java b/src/org/opendatakit/briefcase/reused/http/CommonsHttp.java index b63b62b56..1d74162bc 100644 --- a/src/org/opendatakit/briefcase/reused/http/CommonsHttp.java +++ b/src/org/opendatakit/briefcase/reused/http/CommonsHttp.java @@ -21,6 +21,7 @@ import static org.opendatakit.briefcase.reused.http.RequestMethod.POST; import java.io.IOException; +import java.io.InputStream; import java.io.UncheckedIOException; import java.net.SocketTimeoutException; import java.net.URL; @@ -30,6 +31,7 @@ import org.apache.http.conn.ConnectTimeoutException; import org.apache.http.conn.HttpHostConnectException; import org.apache.http.entity.BasicHttpEntity; +import org.apache.http.entity.BufferedHttpEntity; import org.apache.http.entity.ContentType; import org.apache.http.entity.mime.MultipartEntityBuilder; import org.apache.http.entity.mime.content.InputStreamBody; @@ -126,10 +128,9 @@ private Response uncheckedExecute(Request request, Executor executor) part.getName(), new InputStreamBody(part.getBody(), ContentType.create(part.getContentType()), part.getAttachmentName()) ); - body = bodyBuilder.build(); + body = makeRepeatable(bodyBuilder.build()); } else { - body = new BasicHttpEntity(); - ((BasicHttpEntity) body).setContent(request.getBody()); + body = makeRepeatable(buildBasicEntity(request.getBody())); } commonsRequest.body(body); } @@ -147,6 +148,20 @@ private Response uncheckedExecute(Request request, Executor executor) } } + private BasicHttpEntity buildBasicEntity(InputStream contents) { + BasicHttpEntity entity = new BasicHttpEntity(); + entity.setContent(contents); + return entity; + } + + private BufferedHttpEntity makeRepeatable(HttpEntity entity) { + try { + return new BufferedHttpEntity(entity); + } catch (IOException e) { + throw new UncheckedIOException(e); + } + } + private static org.apache.http.client.fluent.Request getCommonsRequest(Request request) { switch (request.getMethod()) { case GET: