Niedzielski has uploaded a new change for review. https://gerrit.wikimedia.org/r/270245
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(+), 1 deletion(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/45/270245/1 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..9bcd65a 100644 --- a/app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java +++ b/app/src/main/java/org/wikipedia/dataclient/RestAdapterFactory.java @@ -25,7 +25,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: newchange Gerrit-Change-Id: I738c1d739e8bc871e4392b64050e7083ab72c40f Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Niedzielski <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
