Перечисление сегментов с помощью Google Cloud Storage приводит к NoSuchMethodError, Java AppEngine - PullRequest
2 голосов
/ 07 марта 2019

Попытка просто перечислить сегменты в моем проекте Google Cloud Storage, но не могу понять, почему я получаю следующую ошибку:

java.lang.NoSuchMethodError: com.google.api.services.storage.model.Bucket.getIamConfiguration () Lcom / Google / API / услуги / хранение / модель / Bucket $ IamConfiguration;

Я тестирую его с помощью следующего сервлета:

package servlets;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.cloud.storage.Bucket;
import com.google.cloud.storage.Storage;
import com.google.cloud.storage.StorageOptions;

@WebServlet("/Test")
public class Test extends HttpServlet {
    private static final long serialVersionUID = 1L;

    public Test() {
        super();
    }


    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

        Storage storage = StorageOptions.getDefaultInstance().getService();
        for (Bucket bucket : storage.list().iterateAll()) { //this line is giving the error
            response.getWriter().write(bucket.getName());
        }
    }
}

У меня в помпе:

<dependency>
    <groupId>com.google.appengine.tools</groupId>
    <artifactId>appengine-gcs-client</artifactId>
    <version>0.8</version>
</dependency>

<dependency>
    <groupId>com.google.cloud</groupId>
    <artifactId>google-cloud-storage</artifactId>
    <version>1.64.0</version>
</dependency>

Прежняя зависимость не требуется для этого конкретного примера, но она мне нужна для другой части приложения, я подозреваю, что это может быть проблема. Есть идеи, что может пойти не так?

Ответы [ 2 ]

1 голос
/ 20 марта 2019

Нашел проблему. Я получал NoSuchMethodError, потому что, очевидно, нужная библиотека не была включена в проект, даже если она была указана как зависимость maven. Некоторое несоответствие между библиотеками на сервере разработки и библиотеками на рабочем сервере.

Решение в Eclipse состояло в том, чтобы удалить все соответствующие библиотеки Google и снова добавить их, щелкнув правой кнопкой мыши проект> Путь сборки> Настроить путь сборки ...> Добавить библиотеку ...> Библиотеки Google Cloud Platform> Выбрать "Приложение" Engine Engine »и« Облачное хранилище ».

1 голос
/ 18 марта 2019

Поскольку вы используете Java: на случай, если вы захотите попробовать google-cloud-nio , у него есть метод listBuckets, который выглядит следующим образом:

Page<Bucket> buckets = CloudStorageFileSystem.listBuckets("my-project");
Iterator<Bucket> bucketIterator = buckets.iterateAll();
while (bucketIterator.hasNext()) {
  Bucket bucket = bucketIterator.next();
  // do something with the bucket
}
...