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 {