2016-07-29 4 views
0

현재 Google 드라이브에서 파일 목록을 얻으려면 https://developers.google.com/drive/v3/web/quickstart/java 자습서를 따르고 있습니다. .setDataStoreFactory(DATA_STORE_FACTORY)java.io.EOFException GDrive API 인증

에서 아마

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

오류입니다 : 오전에 다음과 같은 예외

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 발생할 가능성이있는 예외는 다음과 같다 생성하는 권한을 부여하기 위해 사용하고있는 튜토리얼의 코드를 점점 누구든지이 오류로 나를 안내 해줄 수 있습니까?

감사

+0

이 문제가 계속 발생합니까? –

답변

0

예외는 상기 end of file (EOF) 나타내거나 스트림의 끝에 도달 예기치 않게되었다. 또한이 예외는 주로 스트림의 끝을 알리기 위해 DataInputStreams에서 사용됩니다. 그러나 다른 입력 작업은 EOFException을 던지는 대신 스트림 끝 부분에 특별한 값을 반환 할 수 있습니다.

EOFException 클래스는 IOException 클래스를 확장합니다. IOException 클래스는 실패한 I/O 작업이나 중단 된 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" "/" "읽기") \t at java.security.AccessControlContext.checkPermission (AccessControlContext.java:484) \t java.security.AccessController.checkPermission (AccessController.java:698) \t에서 java.lang.SecurityManager.checkPermission (SecurityManager.java:549) \t com.google.apphosting.runtime.security.CustomSecurityManager.checkPermission (CustomSecurityManager .java : 55) \t에서 java.lang.SecurityManager.checkRead (SecurityManager.java:888) \t at java.io.File.exists (File.java:877) –

+0

것 같습니다 Google 앱 엔진을 사용하여 파일을 만들고 읽을 수 없습니다. 가능한 문제가 될 수있는 것은 무엇입니까 ?? –

0

나는 이것이 이전 게시물 것을 알고,하지만 난 거의 동일한 스택 트레이스를했다 유일한 대답은 매우 아니었다 도움이됩니다. 그래서, 나는 그것이 나를 뒤쫓아 오는 사람들에게 도움이 될 것이라는 희망으로 글을 올리고있다.

이 문제는 파일/디렉터리 사용 권한과 관련이있는 것으로 보입니다. FileDataStoreFactory에서 사용중인 파일 경로를 내 응용 프로그램에서 읽기/쓰기 권한이있는 디렉토리로 변경하자마자 OAuth2가 올바르게 작동했습니다. 따라서 제한되지 않은 파일 경로를 사용하고 모든 디렉토리가 올바른 소유권과 권한을 가지고 있는지 확인하십시오.