2013-10-02 70 views
0

我跟着步驟部署DrEdit爲Java:谷歌DrEdit例如對Java將無法正常工作

https://github.com/googledrive/dredit/tree/master/java

當我訪問應用程序,我在AppEngine上的日誌控制檯得到這個錯誤!

2013-10-02 12:51:08.404 
/start 
java.lang.NullPointerException 
    at com.google.drive.samples.dredit.DrEditServlet.loginIfRequired(DrEditServlet.java:149) 
    at com.google.drive.samples.dredit.StartPageServlet.doGet(StartPageServlet.java:46) 
    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) 

這是第149行。credentialManager爲空。

protected void loginIfRequired(HttpServletRequest req, 
    HttpServletResponse resp) { 
    Credential credential = getCredential(req, resp); 
    if (credential == null) { 
    // redirect to authorization url 
    try { 
     resp.sendRedirect(credentialManager.getAuthorizationUrl()); // line 149 

它應該在的init()進行設置

public void init() throws ServletException { 
    super.init(); 
    // init credential manager 
    credentialManager = new CredentialManager(
     getClientSecrets(), TRANSPORT, JSON_FACTORY); 
    } 

我無法使用的System.out.println,因爲它永遠不會在日誌中顯示,即使我選擇了「所有請求」 。

我也越來越的NoSuchMethodError:

Error for/
java.lang.NoSuchMethodError: com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets.load(Lcom/google/api/client/json/JsonFactory;Ljava/io/InputStream;)Lcom/google/api/client/googleapis/auth/oauth2/GoogleClientSecrets; 
    at com.google.drive.samples.dredit.DrEditServlet.getClientSecrets(DrEditServlet.java:249) 
    at com.google.drive.samples.dredit.DrEditServlet.init(DrEditServlet.java:88) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:212) 
    at org.mortbay.jetty.servlet.ServletHolder.initServlet(ServletHolder.java:440) 

這恰好是該行:

249  return GoogleClientSecrets.load(JSON_FACTORY, stream); 

我應該指出,它的工作原理確定本地當我訪問本地主機:8888 /啓動,它只是發送給Google進行身份驗證,但當它嘗試重定向到appspot.com/oauth2callback時當然失敗。

回答

1

「NoSuchMethodError」可能是您複製/粘貼的代碼與您安裝的Google Oauth庫的版本不匹配。我的猜測是圖書館被更新了,但Google並沒有回去更新DrEdit的例子。如果您使用Eclipse插件,那麼它會爲您提供最新的庫。

最後一點,要在本地服務器上測試oauth,有幾個技巧。

選項1.創建本地/ etc/hosts文件(或同等學歷)127.0.0.1 dev.example.com的條目。然後,您可以將dev.example.com配置爲API控制檯中的回調URL。

選項2.使用goo.gl爲localhost:8000/mycallbackservlet創建縮短的URL然後,您可以將縮短的URL配置爲API控制檯中的回調URL。 (注意,我使用選項1,所以沒有親自嘗試過)。

在這兩種情況下,您都需要修改代碼以感知它在本地devserver上運行並相應地調整其回調URL。

在你的NPE問題上,顯然很難說沒有進一步的信息,但我的2c是DrEdit不是理解oauth的好切入點。

心連心

0

目前,我也正在DrEdit代碼,我已經通過了錯誤的線路沒有這樣的方法 - 回報GoogleClientSecrets。加載(JSON_FACTORY,流);

我被這句話像以前一樣添加一行糾正碼 -

InputStream stream = getServletContext().getResourceAsStream(CLIENT_SECRETS_FILE_PATH); 
InputStreamReader reader = new InputStreamReader(stream); //I have added this line. 
try { 
     return GoogleClientSecrets.load(JSON_FACTORY, reader); //initially it was stream. I changed it to reader. 

這解決了我沒有這樣的方法問題。我不確定你得到的NPE。希望這個小小的改正,也解決了你的問題。

相關問題