Dbrant has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/403190 )
Change subject: Extend HttpStatusException to contain ServiceError information. ...................................................................... Extend HttpStatusException to contain ServiceError information. This is a groundwork patch broken off from the big Syncing patch, to make the changes more digestible. The ServiceError structure gets transmitted along with HTTP 40x errors, but we just weren't using it properly yet. This patch captures this information, since we'll need it to differentiate between various service errors when synchronizing. Change-Id: Iee4d34d3bdd83ca6794ee6c79784b6dedbc2a8fa --- M app/src/main/java/org/wikipedia/dataclient/ServiceError.java M app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java M app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java M app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java 4 files changed, 36 insertions(+), 9 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/90/403190/1 diff --git a/app/src/main/java/org/wikipedia/dataclient/ServiceError.java b/app/src/main/java/org/wikipedia/dataclient/ServiceError.java index f703338..55dfff5 100644 --- a/app/src/main/java/org/wikipedia/dataclient/ServiceError.java +++ b/app/src/main/java/org/wikipedia/dataclient/ServiceError.java @@ -1,10 +1,12 @@ package org.wikipedia.dataclient; +import android.support.annotation.NonNull; + /** * The API reported an error in the payload. */ public interface ServiceError { - String getTitle(); + @NonNull String getTitle(); - String getDetails(); + @NonNull String getDetails(); } diff --git a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java index 24ce4a0..b251fb8 100644 --- a/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java +++ b/app/src/main/java/org/wikipedia/dataclient/mwapi/MwServiceError.java @@ -19,12 +19,12 @@ @SuppressWarnings("unused") @Nullable private String docref; @SuppressWarnings("unused") @NonNull private List<Message> messages = Collections.emptyList(); - @Override @Nullable public String getTitle() { - return code; + @Override @NonNull public String getTitle() { + return StringUtils.defaultString(code); } - @Override @Nullable public String getDetails() { - return info; + @Override @NonNull public String getDetails() { + return StringUtils.defaultString(info); } @Nullable public String getDocRef() { diff --git a/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java b/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java index fbc3672..92c3f7a 100644 --- a/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java +++ b/app/src/main/java/org/wikipedia/dataclient/okhttp/HttpStatusException.java @@ -1,6 +1,11 @@ package org.wikipedia.dataclient.okhttp; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; + +import org.wikipedia.dataclient.ServiceError; +import org.wikipedia.dataclient.restbase.RbServiceError; +import org.wikipedia.util.log.L; import java.io.IOException; @@ -9,18 +14,35 @@ public class HttpStatusException extends IOException { private final int code; private final String url; + @Nullable private ServiceError serviceError; public HttpStatusException(@NonNull Response rsp) { this.code = rsp.code(); this.url = rsp.request().url().uri().toString(); + try { + if (rsp.body() != null && rsp.body().contentType() != null + && rsp.body().contentType().toString().contains("json")) { + serviceError = RbServiceError.create(rsp.body().string()); + } + } catch (Exception e) { + L.e(e); + } } public int code() { return code; } + public ServiceError serviceError() { + return serviceError; + } + @Override public String getMessage() { - return "Code: " + Integer.toString(code) + ", URL: " + url; + String str = "Code: " + Integer.toString(code) + ", URL: " + url; + if (serviceError != null) { + str += ", title: " + serviceError.getTitle() + ", detail: " + serviceError.getDetails(); + } + return str; } } diff --git a/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java b/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java index 8b957aa..31f8d20 100644 --- a/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java +++ b/app/src/main/java/org/wikipedia/dataclient/restbase/RbServiceError.java @@ -2,6 +2,7 @@ import android.support.annotation.NonNull; +import org.apache.commons.lang3.StringUtils; import org.wikipedia.dataclient.ServiceError; import org.wikipedia.json.GsonUnmarshaller; import org.wikipedia.model.BaseModel; @@ -21,12 +22,14 @@ } @Override + @NonNull public String getTitle() { - return title; + return StringUtils.defaultString(title); } @Override + @NonNull public String getDetails() { - return detail; + return StringUtils.defaultString(detail); } } -- To view, visit https://gerrit.wikimedia.org/r/403190 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iee4d34d3bdd83ca6794ee6c79784b6dedbc2a8fa Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Dbrant <dbr...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits