GAE java.lang.IllegalStateException: сначала должен вызвать один из set*BlobStorage()
Я пытаюсь загрузить файл в GAE с помощью API Blobstore. Я получаю следующее исключение при локальном запуске сервера GAE (режим dev):
WARNING: /_ah/upload/ag10cmlwc2NoZWR1bGVychsLEhVfX0Jsb2JVcGxvYWRTZXNzaW9uX18YFQw
java.lang.IllegalStateException: Must call one of set*BlobStorage() first.
at com.google.appengine.api.blobstore.dev.BlobStorageFactory.getBlobStorage(BlobStorageFactory.java:24)
at com.google.appengine.api.blobstore.dev.UploadBlobServlet.init(UploadBlobServlet.java:88)
at javax.servlet.GenericServlet.init(GenericServlet.java:215)
at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440)
at org.mortbay.jetty.servlet.ServletHolder.getServlet(ServletHolder.java:339)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:487)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
Я использую GAE 1.3.5, но попробовал все версии начиная с GAE 1.3.0 (первая версия с Blobstore). Я использую плагин GAE Maven: http://code.google.com/p/maven-gae-plugin/
Моя форма написана в GWT 2.0.4. В настоящее время форма представляет собой просто поле ввода файла с отправкой.
Я получаю вышеуказанное исключение после отправки формы. Я могу успешно получить URL для загрузки из службы Blobstore.
На GAE все отлично работает. Я проверил, что ничего не вводится в хранилище блогов в моем локальном dev env (через консоль dev dev). Я загружаю файл CSV размером ~1 КБ, но безуспешно пробовал файлы других типов / размеров (те же файлы работают на GAE Prod).
5 ответов
Проблема была вызвана включением заглушек и тестовых файлов в classpath при запуске сервера приложений dev. Если вы используете maven, просто измените область зависимости:
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>${gae.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-testing</artifactId>
<version>${gae.version}</version>
<scope>test</scope>
</dependency>
Если вы не используете maven, убедитесь, что этих файлов нет в вашем WEB-INF/lib или classpath.
При вызове вашей страницы, которая генерирует HTML (используя сервлет, JSP и т. Д.) И вызывает blobstoreService.createUploadUrl("/upload");
Вы не можете повторно использовать эту страницу несколько раз.
Перезагрузите эту страницу в браузере каждый раз, когда вы хотите загрузить файл.
Я не использую Maven, просто Eclipse и плагины GAE. Я также не видел никаких тестовых файлов.jar в моем classpath. Я просто удалил Run Configuration в Eclipse и перезапустил, и это сработало. Понятия не имею, что пошло не так, но это исправило проблему для меня во время работы в режиме dev/local.
Если вы используете не Maven, а Eclipse с плагином:
УДАЛИТЬ ЗАПУСК / КОНФИГУРАЦИЮ ОТЛАДКИ. Чтобы создать новый, просто щелкните правой кнопкой мыши на проекте и выберите Run/ Debug As > Web Application.