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
