2016-07-29 15 views
0

Ich bin derzeit https://developers.google.com/drive/v3/web/quickstart/java Tutorial folgen, um die Liste der Dateien aus dem Doogle-Laufwerk zu erhalten. In Uhr erhält die folgende Ausnahmejava.io.EOFException GDrive API-Autorisierung

Caused by: 

java.io.EOFException 
    at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) 
    at java.io.ObjectInputStream$BlockDataInputStream.readShort(Unknown Source) 
    at java.io.ObjectInputStream.readStreamHeader(Unknown Source) 
    at java.io.ObjectInputStream.<init>(Unknown Source) 
    at com.google.api.client.util.IOUtils.deserialize(IOUtils.java:171) 
    at com.google.api.client.util.store.FileDataStoreFactory$FileDataStore.<init>(FileDataStoreFactory.java:102) 
    at com.google.api.client.util.store.FileDataStoreFactory.createDataStore(FileDataStoreFactory.java:73) 
    at com.google.api.client.util.store.AbstractDataStoreFactory.getDataStore(AbstractDataStoreFactory.java:55) 
    at com.google.api.client.auth.oauth2.StoredCredential.getDefaultDataStore(StoredCredential.java:171) 
    at com.google.api.client.auth.oauth2.AuthorizationCodeFlow$Builder.setDataStoreFactory(AuthorizationCodeFlow.java:736) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow$Builder.setDataStoreFactory(GoogleAuthorizationCodeFlow.java:209) 
    at com.demo.gapps.server.FetchNewFilesCron.authorize(FetchNewFilesCron.java:233) 
    at com.demo.gapps.server.FetchNewFilesCron.getDriveService(FetchNewFilesCron.java:244) 
    at com.demo.gapps.server.FetchNewFilesCron.doGet(FetchNewFilesCron.java:97) 
    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 com.google.appengine.api.socket.dev.DevSocketFilter.doFilter(DevSocketFilter.java:74) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.ResponseRewriterFilter.doFilter(ResponseRewriterFilter.java:128) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:34) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:63) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.apphosting.utils.servlet.TransactionCleanupFilter.doFilter(TransactionCleanupFilter.java:50) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.StaticFileFilter.doFilter(StaticFileFilter.java:125) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectRequest(DevAppServerModulesFilter.java:366) 
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doDirectModuleRequest(DevAppServerModulesFilter.java:349) 
    at com.google.appengine.tools.development.DevAppServerModulesFilter.doFilter(DevAppServerModulesFilter.java:116) 
    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 com.google.appengine.tools.development.DevAppEngineWebAppContext.handle(DevAppEngineWebAppContext.java:98) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at com.google.appengine.tools.development.JettyContainerService$ApiProxyHandler.handle(JettyContainerService.java:511) 
    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.HttpParser.parseNext(HttpParser.java:547) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 

Der Code aus dem Tutorial, das ich zu genehmigen bin mit, dass teh mögliche Ausnahme erzeugt wird, wie folgt:

* @return an authorized Credential object. 
     * @throws IOException 
     */ 
     public static Credential authorize() throws IOException { 

      System.out.println("file path is "+DATA_STORE_DIR.getPath()); 

      // Load client secrets. 
      InputStream in = 
       FetchNewFilesCron.class.getResourceAsStream("/client_secrets.json"); 
      GoogleClientSecrets clientSecrets = 
       GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); 



      // Build flow and trigger user authorization request. 
      GoogleAuthorizationCodeFlow flow = 
        new GoogleAuthorizationCodeFlow.Builder(
          HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) 
        .setDataStoreFactory(DATA_STORE_FACTORY) 
        .setAccessType("offline") 
        .build(); 
      Credential credential = new AuthorizationCodeInstalledApp(
       flow, new LocalServerReceiver()).authorize("user"); 
      System.out.println(
        "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath()); 
      return credential; 
     } 

Der Fehler wird wahrscheinlich bei .setDataStoreFactory(DATA_STORE_FACTORY)

Kann jemand bitte mich mit diesem Fehler führen.

Danke,

+0

Ist dieses Problem weiterhin aufgetreten? –

Antwort

0

Die Ausnahme gibt die die end of file (EOF), oder das Ende des Stroms unerwartet erreicht ist. Auch diese Ausnahme wird hauptsächlich von DataInputStreams verwendet, um das Ende des Streams zu signalisieren. Beachten Sie jedoch, dass andere Eingabeoperationen am Ende eines Streams einen speziellen Wert zurückgeben können, anstatt eine EOFException zu werfen.

Die Klasse EOFException erweitert die IOException-Klasse. Dies ist die allgemeine Klasse von Ausnahmen, die von fehlgeschlagenen oder unterbrochenen E/A-Vorgängen erzeugt werden. Darüber hinaus implementiert es die Serializable-Schnittstelle. Außerdem ist es als geprüfte Ausnahme definiert und muss daher in einer Methode oder in der throws-Klausel eines Konstruktors deklariert werden.

DataInputStreams stellen Sie Methoden bereit, die primitive Java-Datentypen von einem zugrunde liegenden Eingabestream auf maschinenunabhängige Weise lesen können. Eine Anwendung schreibt Daten, indem sie die von der OutputStream-Klasse oder der DataOutputStream-Klasse bereitgestellten Methoden verwendet.

Für weitere Informationen, lesen Sie in dieses SO Ticket im Zusammenhang, die über EOFException diskutieren und Datainputstream: java.io.EOFException when try to read from a socket

+0

Eigentlich bekam ich diese Ausnahme in meiner lokalen Umgebung, während ich auf dem Google App Engine-Entwicklungsserver die folgende Ausnahme erhalte. Können Sie mit diesem –

+0

java.security.AccessControlException leiten mich bitte: Zugriff verweigert ("java.io.FilePermission" "/" "lesen") \t bei java.security.AccessControlContext.checkPermission (AccessControlContext.java:484) \t bei java.security.AccessController.checkPermission (AccessController.java:698) \t bei java.lang.SecurityManager.checkPermission (SecurityManager.java:549) \t bei com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission (CustomSecurityManager .java: 55) \t bei java.lang.SecurityManager.checkRead (SecurityManager.java:888) \t bei java.io.File.exists (File.java:877) –

+0

scheint es Google App-Engine erlaubt mir nicht, eine Datei zu erstellen und zu lesen. Was könnte das mögliche Problem sein? –

0

Ich weiß, dass dies eine alte Post, aber ich hatte fast genau die gleiche Stacktrace und die einzige Antwort war nicht sehr hilfreich. Also, ich poste in der Hoffnung, dass es denen helfen wird, die nach mir kommen.

Das Problem scheint mit Datei-/Verzeichnisberechtigungen zusammenzuhängen. Sobald ich den von der FileDataStoreFactory verwendeten Dateipfad in ein Verzeichnis geändert habe, für das meine Anwendung Lese-/Schreibberechtigungen hatte, funktionierte OAuth2 korrekt. Stellen Sie daher sicher, dass Sie einen nicht eingeschränkten Dateipfad verwenden und dass alle Verzeichnisse über die richtigen Eigentümer und Berechtigungen verfügen.

Verwandte Themen