2015-03-19 35 views
0

我正在開發一個我想使用Google日曆功能的Spring-MVC項目。我使用Google sample code的示例代碼,並試圖實現它。我有ProjectName.json鍵這些天來谷歌用於授權。我得到一個空指針異常。請檢查我做錯了什麼。密鑰位於src/main/resources/keys/key.json中。下面是代碼:Spring mvc:Google api提供JSON密鑰的空指針

public void authorizeAndTest(){ 

     try { 
      httpTransport = new NetHttpTransport(); 
      dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR); 
      Credential credential = authorize(); 

      client = new com.google.api.services.calendar.Calendar.Builder(httpTransport,JSON_FACTORY,credential).setApplicationName(APPLICATION_NAME).build(); 

      showCalenders(); 
      addCalendarsUsingBatch(); 
      Calendar calendar = addCalendar(); 
      updateCalendar(calendar); 
      addEvent(calendar); 
      showEvents(calendar); 
      deleteCalendarInBatch(); 
      deleteCalendar(calendar); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private static Credential authorize() throws Exception{ 
// The line of code below is throwing me an error. I will paste the error log. 
     GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, 
       new InputStreamReader(OAuth.class.getResourceAsStream("keys/c0cc3b4b7502.json"))); 
     if (clientSecrets.getDetails().getClientId().startsWith("Enter") 
       || clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) { 
      System.out.println(
        "Enter Client ID and Secret from https://code.google.com/apis/console/?api=calendar " 
          + "into calendar-cmdline-sample/src/main/resources/client_secrets.json"); 
      return null; 
     } 

     GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(httpTransport,JSON_FACTORY,clientSecrets, 
       Collections.singleton(CalendarScopes.CALENDAR)).setDataStoreFactory(dataStoreFactory).build(); 

// Is this where I pass the email address for which I am trying to get calendar??? 
     return new AuthorizationCodeInstalledApp(flow,new LocalServerReceiver()).authorize("[email protected]"); 
    } 

錯誤代碼:

java.lang.NoSuchMethodError: com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.load(Lcom/google/api/client/json/JsonFactory;Ljava/io/Reader;)Lcom/google/api/client/googleapis/auth/oauth2/GoogleClientSecrets; 
    com.journaldev.spring.utility.OAuth.authorize(OAuth.java:72) 
    com.journaldev.spring.utility.OAuth.authorizeAndTest(OAuth.java:54) 
    com.journaldev.spring.controller.PersonController.listCanvas(PersonController.java:596) 
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
    java.lang.reflect.Method.invoke(Method.java:483) 
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:215) 
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132) 
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749) 
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689) 
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961) 
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:852) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:620) 
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:727) 

的pom.xml:

<dependency> 
      <groupId>com.google.apis</groupId> 
      <artifactId>google-api-services-calendar</artifactId> 
      <version>v3-rev119-1.19.1</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.gdata</groupId> 
      <artifactId>core</artifactId> 
      <version>1.47.1</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.apis</groupId> 
      <artifactId>google-api-services-calendar</artifactId> 
      <version>v3-rev118-1.18.0-rc</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.http-client</groupId> 
      <artifactId>google-http-client-jackson</artifactId> 
      <version>1.15.0-rc</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.oauth-client</groupId> 
      <artifactId>google-oauth-client-java6</artifactId> 
      <version>1.19.0</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.apis</groupId> 
      <artifactId>google-api-services-calendar</artifactId> 
      <version>v3-rev119-1.19.1</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.oauth-client</groupId> 
      <artifactId>google-oauth-client</artifactId> 
      <version>1.18.0-rc</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.api.client</groupId> 
      <artifactId>google-api-client</artifactId> 
      <version>1.4.1-beta</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.http-client</groupId> 
      <artifactId>google-http-client</artifactId> 
      <version>1.19.0</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.http-client</groupId> 
      <artifactId>google-http-client-jackson2</artifactId> 
      <version>1.19.0</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.api.client</groupId> 
      <artifactId>google-api-client-json</artifactId> 
      <version>1.2.3-alpha</version> 
     </dependency> 

     <dependency> 
      <groupId>org.springframework.security.oauth</groupId> 
      <artifactId>spring-security-oauth2</artifactId> 
      <version>2.0.3.RELEASE</version> 
     </dependency> 

回答

1

想這個問題是這樣的部分(無法找到,因爲走錯了路的JSON )

OAuth.class.getResourceAsStream("keys/app-name-c0cc3b4b7502.json")) 

試着改用

OAuth.class.getResourceAsStream("/keys/app-name-c0cc3b4b7502.json")) 
+0

謝謝,這有幫助,但現在它無法找到有問題的課程本身。你能否請檢查新的錯誤日誌。謝謝。 – 2015-03-19 09:11:16

+0

檢查是否包含正確版本的庫。 – StanislavL 2015-03-19 09:36:30

+0

我解決了一個,你可以請檢查這個問題:http://stackoverflow.com/questions/29141703/spring-mvc-google-calendar-no-such-method-com-google-api-client-json-jsonfacto – 2015-03-19 10:09:15