jenkins-bot has submitted this change and it was merged.

Change subject: Work around empty Retrofit POST request bodies
......................................................................


Work around empty Retrofit POST request bodies

https://github.com/square/retrofit/issues/854#issuecomment-159750494

Change-Id: I738c1d739e8bc871e4392b64050e7083ab72c40f
---
A app/src/main/java/org/wikipedia/dataclient/NullBodyAwareOkClient.java
M app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java
2 files changed, 54 insertions(+), 2 deletions(-)

Approvals:
  BearND: Looks good to me, approved
  jenkins-bot: Verified



diff --git 
a/app/src/main/java/org/wikipedia/dataclient/NullBodyAwareOkClient.java 
b/app/src/main/java/org/wikipedia/dataclient/NullBodyAwareOkClient.java
new file mode 100644
index 0000000..cc40c2d
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/dataclient/NullBodyAwareOkClient.java
@@ -0,0 +1,53 @@
+package org.wikipedia.dataclient;
+
+import com.squareup.okhttp.OkHttpClient;
+import com.squareup.okhttp.internal.http.HttpMethod;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import retrofit.client.OkClient;
+import retrofit.client.Request;
+import retrofit.client.Response;
+import retrofit.mime.TypedOutput;
+
+/** Workaround for https://github.com/square/retrofit/issues/854. */
+public class NullBodyAwareOkClient extends OkClient {
+    public NullBodyAwareOkClient(OkHttpClient okHttpClient) {
+        super(okHttpClient);
+    }
+
+    @Override
+    public Response execute(Request request) throws IOException {
+        if (HttpMethod.requiresRequestBody(request.getMethod()) && 
request.getBody() == null) {
+            Request newRequest = new Request(request.getMethod(), 
request.getUrl(),
+                    request.getHeaders(), EmptyOutput.INSTANCE);
+            return super.execute(newRequest);
+        }
+
+        return super.execute(request);
+    }
+
+    private static final class EmptyOutput implements TypedOutput {
+        static final TypedOutput INSTANCE = new EmptyOutput();
+
+        private EmptyOutput() { }
+
+        @Override
+        public String fileName() {
+            return null;
+        }
+
+        @Override
+        public String mimeType() {
+            return "application/json";
+        }
+
+        @Override
+        public long length() {
+            return 0;
+        }
+
+        @Override public void writeTo(OutputStream out) throws IOException { }
+    }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java 
b/app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java
index a67ea55..c37f5ed 100644
--- a/app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java
+++ b/app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java
@@ -12,7 +12,6 @@
 
 import retrofit.RequestInterceptor;
 import retrofit.RestAdapter;
-import retrofit.client.OkClient;
 import retrofit.converter.GsonConverter;
 
 public final class RestAdapterFactory {
@@ -25,7 +24,7 @@
         final WikipediaApp app = WikipediaApp.getInstance();
         return new RestAdapter.Builder()
                 .setLogLevel(Prefs.getRetrofitLogLevel())
-                .setClient(new 
OkClient(OkHttpConnectionFactory.createClient(app)))
+                .setClient(new 
NullBodyAwareOkClient(OkHttpConnectionFactory.createClient(app)))
                 .setRequestInterceptor(new RequestInterceptor() {
                     @Override
                     public void intercept(RequestFacade request) {

-- 
To view, visit https://gerrit.wikimedia.org/r/270245
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I738c1d739e8bc871e4392b64050e7083ab72c40f
Gerrit-PatchSet: 4
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <[email protected]>
Gerrit-Reviewer: BearND <[email protected]>
Gerrit-Reviewer: Brion VIBBER <[email protected]>
Gerrit-Reviewer: Dbrant <[email protected]>
Gerrit-Reviewer: Mholloway <[email protected]>
Gerrit-Reviewer: Niedzielski <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to