GAE java.lang.IllegalStateException: сначала должен вызвать один из set * BlobStorage () - PullRequest
3 голосов
/ 04 августа 2010

Я пытаюсь загрузить файл в 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 ничего не вводится в blobstore (через консоль dev dev). Я загружаю файл CSV размером ~ 1 КБ, но безуспешно пробовал файлы других типов / размеров (те же файлы работают на GAE Prod).

Ответы [ 5 ]

5 голосов
/ 20 мая 2011

Когда вы вызываете свою страницу, которая генерирует html (используя сервлет, jsp и т. Д.) И вызывает blobstoreService.createUploadUrl("/upload");, вы не можете повторно использовать эту страницу несколько раз.

Перезагрузите эту страницу в браузере каждый раз, когда вы хотите загрузить файл.

3 голосов
/ 27 сентября 2010

Проблема была вызвана включением заглушек и тестовых файлов в 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.

2 голосов
/ 20 июня 2012
$ mvn clean gae:run -DskipTest 

у меня работает

0 голосов
/ 14 апреля 2012

Если используется не Maven, а Eclipse с плагином:

УДАЛИТЬ КОНФИГУРАЦИЮ ПУСК / ОТЛАДКИЧтобы создать новый, просто щелкните правой кнопкой мыши по проекту и выберите «Выполнить / отладить как»> «Веб-приложение»

0 голосов
/ 17 октября 2011

Я не использую Maven, просто Eclipse и плагины GAE. Я также не увидел никаких файлов test .jar в моем classpath. Я просто удалил Run Configuration в Eclipse и перезапустил, и это сработало. Не знаю, что пошло не так, но это исправило проблему при работе в режиме dev / local.

...