I am fairly new to Java and trying to use a Google Cloud service. When I am trying to use an explicit way to point my service account following this guide from this; https://cloud.google.com/docs/authentication/production#passing_code
import com.google.api.client.util.Lists;
import com.google.api.gax.paging.Page;
import com.google.auth.oauth2.GoogleCredentials;
import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;
import java.io.FileInputStream;
import java.io.IOException;
static void authExplicit(String jsonPath) throws IOException {
// You can specify a credential file by providing a path to GoogleCredentials.
// Otherwise credentials are read from the GOOGLE_APPLICATION_CREDENTIALS environment variable.
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath))
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();
System.out.println("Buckets:");
Page<Bucket> buckets = storage.list();
for (Bucket bucket : buckets.iterateAll()) {
System.out.println(bucket.toString());
}
}
I already have installed requirements. However, this code throws an error as follows;
error: no suitable method found for newArrayList(String)
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath)).createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
^
method Lists.<E#1>newArrayList() is not applicable
(cannot infer type-variable(s) E#1
(actual and formal argument lists differ in length))
method Lists.<E#2>newArrayList(Iterable<? extends E#2>) is not applicable
(cannot infer type-variable(s) E#2
(argument mismatch; String cannot be converted to Iterable<? extends E#2>))
method Lists.<E#3>newArrayList(Iterator<? extends E#3>) is not applicable
(cannot infer type-variable(s) E#3
(argument mismatch; String cannot be converted to Iterator<? extends E#3>)) where E#1,E#2,E#3 are type-variables:
E#1 extends Object declared in method <E#1>newArrayList()
E#2 extends Object declared in method <E#2>newArrayList(Iterable<? extends E#2>)
E#3 extends Object declared in method <E#3>newArrayList(Iterator<? extends E#3>)
I am not sure what is wrong in my setting and no luck on searching an answer.
CodePudding user response:
So a quick look at google's documentation https://cloud.google.com/java/docs/reference/google-http-client/latest/com.google.api.client.util.Lists, it doesn't contain a method newArrayList
that takes a String as a parameter, but google has another library (guava) that contains the method you are looking for, https://guava.dev/releases/19.0/api/docs/com/google/common/collect/Lists.html, so replace your import com.google.api.client.util.Lists
with import com.google.common.collect.Lists;
;