GraphQlClient: fix error handling
* Don't try to parse result if response-code is not 200
* Throw exception if not able to parse response.
Solves: Jira GER-1625
Change-Id: Ib7b3c226272e40abe24048577c008a599dadd3cc
diff --git a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java
index 572d17d..c3c9201 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/eventseiffel/eiffel/api/EiffelGraphQlClient.java
@@ -18,6 +18,7 @@
import com.google.common.collect.Lists;
import com.google.common.flogger.FluentLogger;
import com.google.gson.Gson;
+import com.google.gson.JsonSyntaxException;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.ArtifactEventKey;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.CompositionDefinedEventKey;
import com.googlesource.gerrit.plugins.eventseiffel.eiffel.EventKey;
@@ -135,18 +136,25 @@
throw new EventStorageException(e, "Query \"%s\" failed.", query);
}
- QueryResult result = GSON.fromJson(response.body(), QueryResult.class);
+ if (response.statusCode() != 200) {
+ throw new EventStorageException(
+ "Query \"%s\" failed: [%d] %s", query, response.statusCode(), response.body());
+ }
+
+ QueryResult result;
+ try {
+ result = GSON.fromJson(response.body(), QueryResult.class);
+ } catch (JsonSyntaxException e) {
+ throw new EventStorageException(
+ e, "Query \"%s\" failed, invalid reply: %s", query, response.body());
+ }
if (result.errors != null) {
throw new EventStorageException(
"Query \"%s\" failed: %s", query, String.join(" | ", result.getErrorMessages()));
}
- if (response.statusCode() == 200) {
- return result;
- }
-
- throw new EventStorageException("Query \"%s\" failed: %s", query, response.body());
+ return result;
}
private HttpResponse<String> post(String query) throws IOException, InterruptedException {