public ConnectionInfo(JsonObject poolsJson) throws RestApiException {
    JsonElement eTmp;
    eTmp = poolsJson.get("implementationVersion");
    if (eTmp == null) {
      throw new RestApiException("implementationVersion missing", poolsJson);
    }
    clusterVersion = eTmp.getAsString();

    eTmp = poolsJson.get("pools");
    if (eTmp == null || eTmp.isJsonArray() == false) {
      throw new RestApiException("pools missing", poolsJson);
    }

    if (eTmp.getAsJsonArray().size() > 0) {
      clusterActive = true;
      eTmp = eTmp.getAsJsonArray().get(0);

      if (eTmp.isJsonObject() == false) {
        throw new RestApiException("Expected object in pools entry", eTmp);
      }

      eTmp = eTmp.getAsJsonObject().get("uri");
      if (eTmp == null || eTmp.isJsonPrimitive() == false) {
        throw new RestApiException("uri missing or malformed", eTmp);
      }

      clusterId = eTmp.getAsString();

    } else {
      clusterActive = false;
      clusterId = null;
    }

    eTmp = poolsJson.get("isAdminCreds");
    adminCreds = eTmp != null && eTmp.getAsBoolean();
  }