GAE java.lang.IllegalStateException:必须首先调用set * BlobStorage()之一

时间:2010-08-04 02:41:35

标签: google-app-engine gwt google-cloud-datastore blobstore maven-gae-plugin

我正在尝试使用Blobstore API在GAE中上传文件。在本地运行GAE服务器(开发模式)时,我收到以下异常:

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编写的。目前,表单只是一个带有提交的文件输入字段。

我在提交表格后收到上述例外情况。我能够从Blobstore服务成功检索上传URL。

GAE上一切正常。我已经验证在本地开发环境中没有输入任何内容(通过开发管理控制台)。我正在上传一张~1Kb的CSV,但尝试了其他文件类型/大小也没有成功(相同的文件适用于GAE prod)。

5 个答案:

答案 0 :(得分:5)

当调用生成html的页面(使用servlet,jsp等)并调用blobstoreService.createUploadUrl("/upload");时,您无法多次重复使用此页面。

在浏览器中每次重新加载此页面

答案 1 :(得分:3)

问题是由运行dev app服务器时在类路径中包含存根和测试jar引起的。如果您使用的是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,请确保这些jar不在您的WEB-INF / lib或类路径中。

答案 2 :(得分:2)

$ mvn clean gae:run -DskipTest 

适合我

答案 3 :(得分:0)

我没有使用Maven,只使用Eclipse和GAE插件。我在类路径中也没有看到任何 test .jar文件。我刚刚删除了Eclipse中的Run Configuration并重新启动它并且工作正常。不知道出了什么问题,但这解决了我在dev / local模式下运行时的问题。

答案 4 :(得分:0)

如果不使用maven而使用带插件的Eclipse:

删除RUN / DEBUG配置。要创建新的,只需右键单击项目并选择运行/调试As&gt;网络应用程序