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"); Вы не можете повторно использовать эту страницу несколько раз.

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

$ mvn clean gae:run -DskipTest 

работает для меня

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

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

УДАЛИТЬ ЗАПУСК / КОНФИГУРАЦИЮ ОТЛАДКИ. Чтобы создать новый, просто щелкните правой кнопкой мыши на проекте и выберите Run/ Debug As > Web Application.

Другие вопросы по тегам