Gae java.lang.illegalStateException: deve chamar um de set*blobstorage () primeiro
-
25-09-2019 - |
Pergunta
Estou tentando fazer upload de um arquivo no GAE usando a API Blobstore. Estou obtendo a seguinte exceção ao executar o servidor GAE localmente (modo 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)
Estou executando o GAE 1.3.5, mas tentei todas as versões desde o GAE 1.3.0 (primeira versão com a Blobstore). Estou usando o plugin GAE Maven: http://code.google.com/p/maven-gae-plugin/
Meu formulário está escrito no GWT 2.0.4. Atualmente, o formulário é apenas um campo de entrada de arquivo com um envio.
Recebo a exceção acima depois de enviar o formulário. Consigo recuperar com sucesso um URL de upload do serviço Blobstore.
Tudo funciona bem no GAE. Verifiquei que nada é inserido na Blobstore no meu Dev Env local (através do console do dev admin). Estou carregando um CSV que é ~ 1KB, mas já experimentei outros tipos/tamanhos de arquivo sem sucesso (os mesmos arquivos funcionam no GAE Prod).
Solução 2
O problema foi causado por ter os stubs e os frascos de teste incluídos no caminho de classe ao executar o servidor de app dev. Se você estiver usando o maven, basta alterar o escopo da dependência:
<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>
Se você não estiver usando o MAVEN, verifique se esses frascos não estão no seu Web-Inf/Lib ou ClassPath.
Outras dicas
Quando ligue para sua página que gera html (usando servlet, jsp, etc.) e chamadas blobstoreService.createUploadUrl("/upload");
Você não pode reutilizar esta página várias vezes.
Recarregue esta página em um navegador toda vez você deseja fazer upload do arquivo.
$ mvn clean gae:run -DskipTest
funciona para mim
Não estou usando o Maven, apenas o Eclipse e os plugins GAE. Eu também não vi nenhum teste.jar arquivos no meu caminho de classe. Acabei de excluir a configuração de execução no Eclipse e reiniciei e funcionou. Não faço ideia do que deu errado, mas isso corrigiu o problema para mim enquanto executa no modo dev/local.
Se não estiver usando maven, mas eclipse com plug -in:
Remova a configuração de execução/depuração. Para criar um novo, basta clicar com o botão direito do mouse no projeto e selecione Run/Debug como> Aplicativo da Web