GcsServiceFactory.createGcsService导致500服务器错误

时间:2018-03-25 15:43:52

标签: google-app-engine google-cloud-platform

我正在开发一个使用GAE和GCS服务器端的应用。除此之外,我可以上传图片并将他们的publicUrl存储在google mysql数据库中。今天我尝试使用.secureUrl(true)获取那些publicUrls,从那时起我发送post请求时出现500服务器错误。

我可以将其分解为以下代码段:

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,
ServletException {


    // create Writer for response
    PrintWriter out = response.getWriter();
    response.setContentType("application/json");

    // create Database Connection url with name database, username and password
    String mysqlUrl = System.getProperty("cloudsql");

    // get 'operation' parameter to determine further action
    String operation = request.getParameter("operation");
    if (operation == null){ operation = "getFav"; }


    GcsService gcsService = GcsServiceFactory.createGcsService();

当我没有注释掉设置了gcsService的最后一行时,我手机发送的每个帖子请求都会收到500服务器错误。如果我将该行作为注释,则所有内容(除了使用gcs的部分除外)都能正常工作。检查Google控制台,我收到以下消息:

java.lang.NoClassDefFoundError:com / google / appengine / api / utils / SystemProperty

    at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createRawGcsService (GcsServiceFactory.java:57)
    at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService (GcsServiceFactory.java:44)
    at com.google.appengine.tools.cloudstorage.GcsServiceFactory.createGcsService (GcsServiceFactory.java:40)
    at net.xyz.yzxI.HelloAppEngine.<init> (HelloAppEngine.java:69)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:423)
    at java.lang.Class.newInstance (Class.java:443)
    at org.eclipse.jetty.server.handler.ContextHandler$Context.createInstance (ContextHandler.java:2481)
    at org.eclipse.jetty.servlet.ServletContextHandler$Context.createServlet (ServletContextHandler.java:1327)
    at org.eclipse.jetty.servlet.ServletHolder.newInstance (ServletHolder.java:1285)
    at org.eclipse.jetty.servlet.ServletHolder.initServlet (ServletHolder.java:615)
    at org.eclipse.jetty.servlet.ServletHolder.getServlet (ServletHolder.java:499)
    at org.eclipse.jetty.servlet.ServletHolder.ensureInstance (ServletHolder.java:791)
    at org.eclipse.jetty.servlet.ServletHolder.prepare (ServletHolder.java:776)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle (ServletHandler.java:579)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:143)
    at org.eclipse.jetty.security.SecurityHandler.handle (SecurityHandler.java:524)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle (SessionHandler.java:226)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle (ContextHandler.java:1180)
    at org.eclipse.jetty.servlet.ServletHandler.doScope (ServletHandler.java:512)
    at org.eclipse.jetty.server.session.SessionHandler.doScope (SessionHandler.java:185)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope (ContextHandler.java:1112)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle (ScopedHandler.java:141)
    at com.google.apphosting.runtime.jetty9.AppVersionHandlerMap.handle (AppVersionHandlerMap.java:297)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle (HandlerWrapper.java:134)
    at org.eclipse.jetty.server.Server.handle (Server.java:534)
    at org.eclipse.jetty.server.HttpChannel.handle (HttpChannel.java:320)
    at com.google.apphosting.runtime.jetty9.RpcConnection.handle (RpcConnection.java:202)
    at com.google.apphosting.runtime.jetty9.RpcConnector.serviceRequest (RpcConnector.java:81)
    at com.google.apphosting.runtime.jetty9.JettyServletEngineAdapter.serviceRequest (JettyServletEngineAdapter.java:108)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchServletRequest (JavaRuntime.java:680)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.dispatchRequest (JavaRuntime.java:642)
    at com.google.apphosting.runtime.JavaRuntime$RequestRunnable.run (JavaRuntime.java:612)
    at com.google.apphosting.runtime.JavaRuntime$NullSandboxRequestRunnable.run (JavaRuntime.java:806)
    at com.google.apphosting.runtime.ThreadGroupPool$PoolEntry.run (ThreadGroupPool.java:274)
    at java.lang.Thread.run (Thread.java:745)

它让我发疯:即使我根本不使用gcs,只是尝试设置它会破坏应用程序。我不知道在哪里看,所以希望其他人有类似的经历或知道要检查什么。

提前致谢

1 个答案:

答案 0 :(得分:0)

如果您使用Maven处理依赖项,则此错误可能是由于com.google.appengine依赖项中的“已提供”。删除pom.xml中的那一行,以便Maven在编译的项目中包含app engine sdk。

在:

<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-api-1.0-sdk</artifactId>
  <version>1.9.63</version>
  <scope>provided</scope>
</dependency>

后:

<dependency>
  <groupId>com.google.appengine</groupId>
  <artifactId>appengine-api-1.0-sdk</artifactId>
  <version>1.9.63</version>
</dependency>