2016-07-29 6 views
0

私は現在、https://developers.google.com/drive/v3/web/quickstart/javaチュートリアルに従っており、Googleドライブからファイルのリストを取得しています。次の例外java.io.EOFException GDrive APIの承認

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) 

私はtehの潜在的な例外を生成し、その認可する使用していますチュートリアルからコードを取得していますでは、次のとおりです。エラーが.setDataStoreFactory(DATA_STORE_FACTORY)

である可能性があり

* @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; 
     } 

誰でもこのエラーで私を導くことができますか?

おかげで、

+0

この問題は引き続き発生していますか? –

答えて

0

例外がend of file (EOF)示し、またはストリームの終わりが予期せずに達しました。また、ストリームの終了を知らせるために、この例外は主にDataInputStreamsによって使用されます。ただし、他の入力操作では、EOFExceptionを投げるのではなく、ストリームの終わりに特殊な値が返されることに注意してください。

EOFExceptionクラスは、IOExceptionクラスを拡張します。これは、I/O操作の失敗または中断によって生成される例外の一般的なクラスです。さらに、Serializableインターフェイスを実装しています。また、チェック例外として定義されているため、メソッドまたはコンストラクタのthrows句で宣言する必要があります。

DataInputStreamsは、基本的なJavaデータ型を基になる入力ストリームからマシンに依存しない方法で読み取ることができるメソッドを提供します。アプリケーションは、OutputStreamクラスまたはDataOutputStreamクラスによって提供されるメソッドを使用してデータを書き込みます。

詳細については、EOFExceptionではおよびDataInputStreamを話し合うこの関連のSOチケットを確認してください。java.io.EOFException when try to read from a socket

+0

実際にこの例外は、Google App Engine開発サーバー上で私のローカル環境に乗っていたが、私は例外を受けている。 –

+0

java.security.AccessControlException:アクセスが拒否されました(「java.io.FilePermission」/「read」) \t java.security.AccessControlContext.checkPermission(AccessControlContext.java:484) \t (SecurityManager.java:549) \t com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission(CustomSecurityManager .java:55) \t at SecurityManager.checkRead(SecurityManager.java:888) \t at java.io.File.exists(File.java:877) –

+0

Googleのアプリケーションエンジンは私がファイルを作成して読むことを許可していません。可能性のある問題は何でしょうか? –

0

私はこれは古い記事であることを知っているが、私は、ほぼ正確に同じスタックトレースを持っていた唯一の答えは非常にありませんでした役に立ったそれで、私はそれが私の後に来る人を助けることを望んで掲示しています。

この問題はファイル/ディレクトリのアクセス許可に関連しているようです。 FileDataStoreFactoryで使用されているファイルパスを、アプリケーションに読み書き権限があるディレクトリに変更すると、OAuth2は正常に機能しました。したがって、制限されていないファイルパスを使用しており、すべてのディレクトリが正しい所有権とアクセス権を持っていることを確認してください。

関連する問題