Handle response errors through Util.getCodeFromResponse

Centralizing the exceptions to provide more details on fail.
This commit is contained in:
Marc Egea i Sala 2015-09-30 10:45:58 +01:00
parent 8648f8bde7
commit 3970fb146c
3 changed files with 36 additions and 11 deletions

View file

@ -8,6 +8,7 @@ import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostException;
import uk.ac.ic.wlgitbridge.snapshot.base.JSONSource;
import uk.ac.ic.wlgitbridge.snapshot.push.exception.UnexpectedPostbackException;
import uk.ac.ic.wlgitbridge.snapshot.push.exception.SnapshotPostExceptionBuilder;
import uk.ac.ic.wlgitbridge.util.Util;
/**
* Created by Winston on 17/11/14.
@ -36,7 +37,7 @@ public class PostbackContents implements JSONSource {
@Override
public void fromJSON(JsonElement json) {
JsonObject responseObject = json.getAsJsonObject();
String code = responseObject.get("code").getAsString();
String code = Util.getCodeFromResponse(responseObject);
setResult(responseObject, code);
}

View file

@ -29,16 +29,9 @@ public class PushResult extends Result {
@Override
public void fromJSON(JsonElement json) {
String code;
try {
JsonObject responseObject = json.getAsJsonObject();
code = responseObject.get("code").getAsString();
} catch (Exception e) {
Util.serr("Unexpected response from API:");
Util.serr(json.toString());
Util.serr("End of response");
throw e;
}
String code = Util.getCodeFromResponse(responseObject);
if (code.equals("accepted")) {
success = true;
} else if (code.equals("outOfDate")) {

View file

@ -1,5 +1,8 @@
package uk.ac.ic.wlgitbridge.util;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import java.io.*;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@ -190,4 +193,32 @@ public class Util {
return fromStream(stream, 0);
}
public static String getCodeFromResponse(JsonObject json) {
String code = "error";
JsonElement codeElement = json.get("code");
if (codeElement == null) {
String error = "Unexpected error";
serr("Unexpected response from API:");
serr(json.toString());
serr("End of response");
JsonElement statusElement = json.get("status");
if (codeElement == null) {
code = statusElement.getAsString();
if (code.equals("422")) {
error = "Unprocessable entity";
} else if (code.equals("404")) {
error = "Not found";
} else if (code.equals("403")) {
error = "Forbidden";
}
}
throw new RuntimeException(error);
} else {
code = codeElement.getAsString();
}
return code;
}
}