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 {