2016-07-30 1 views
0

Ich benutze Google App-Engine zu und versuche, einen Cron-Job zu starten, der ein Erfolg ist. Aber es gibt eine Ausnahme, die ich bin vor jeder kann mir bitte mit dieser Ausnahme führen, die sich wie folgt:com.google.apphosting.runtime.security.shared.stub.java.nio.file.Files

Error for /cron/fetchnewfiles 
java.lang.NoClassDefFoundError: Could not initialize class com.google.apphosting.runtime.security.shared.stub.java.nio.file.Files 
    at com.google.appengine.runtime.Request.process-cbe3f36b744636fe(Request.java) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    at java.lang.reflect.Method.invoke(Method.java:44) 
    at com.google.api.client.util.IOUtils.isSymbolicLink(IOUtils.java:193) 
    at com.google.api.client.util.store.FileDataStoreFactory.<init>(FileDataStoreFactory.java:56) 
    at com.demo.gapps.server.Utils.authorize(Utils.java:283) 
    at com.demo.gapps.server.FetchNewFilesCron.getDriveService(FetchNewFilesCron.java:242) 
    at com.demo.gapps.server.FetchNewFilesCron.doGet(FetchNewFilesCron.java:96) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:446) 
    at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:453) 
    at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:276) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:312) 
    at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:304) 
    at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:450) 
    at java.lang.Thread.run(Thread.java:745) 

Antwort

0

Basierend aus dem Fehlerprotokoll, das java.lang.NoClassDefFoundError: org.jcp.xml.dsig.internal.dom.XMLDSigRI is a restricted class.. Werfen Sie einen Blick auf die Sandbox restriction. Der Stack-Trace zeigt java.lang.reflect an, so dass es wahrscheinlich ein Problem in Bezug auf Sandbox-Einschränkungen und Reflektionen gibt.

Die gesicherte "Sandbox" -Umgebung isoliert Ihre Anwendung für Service und Sicherheit. Es stellt sicher, dass Apps nur Aktionen ausführen können, die die Leistung und Skalierbarkeit anderer Apps nicht beeinträchtigen. Zum Beispiel kann eine App keine Threads erzeugen, Daten in das lokale Dateisystem schreiben oder beliebige Netzwerkverbindungen herstellen. Eine App kann auch keinen JNI oder anderen systemeigenen Code verwenden. Die JVM kann jeden Java-Bytecode ausführen, der innerhalb der Sandbox-Beschränkungen arbeitet.

Die App Engine-Plattform bietet viele services, die Ihr Code aufrufen kann. Ihre Anwendung kann auch scheduled tasks konfigurieren, die in bestimmten Intervallen ausgeführt werden.

Einfache Schritte, wie Cron-Job zu erstellen:

  • Erstellen Sie die cron.xml Datei im WEB-INF/Verzeichnis Ihrer Anwendung (neben appengine-web.xml).
  • Fügen Sie Ihrer Datei einen oder mehrere <cron> Einträge hinzu und definieren Sie die erforderlichen Elemente für Ihren Job, einschließlich der erforderlichen Elemente <url> und <schedule>.

Im folgenden Beispiel wird eine grundlegende cron-Job, der täglich läuft:

/Aufgaben/Zusammenfassung Beta tägliche Zusammenfassung Job alle 24 Stunden Die Zielspezifikation ist optional und ist die Name eines Dienstes/Version. Falls vorhanden, wird das Ziel dem Hostnamen Ihrer App vorangestellt, wodurch der Job an diesen Service/diese Version weitergeleitet wird. Wenn kein Ziel angegeben ist, wird der Job in der Standardversion des Standarddiensts ausgeführt. * Erstellen Sie einen Handler für die URL des Cron-Jobs. Der Handler sollte alle Aufgaben ausführen, die Sie planen möchten. Der Handler sollte mit einem HTTP-Statuscode zwischen 200 und 299 (einschließlich) antworten, um den Erfolg anzuzeigen.