2014-06-14 86 views
0

我有一個可以在Mendeley上與OAuth1一起工作的應用程序。由於不支持OAth1,我必須將我的應用程序遷移到OAuth2以獲取數據。無法通過在Java中使用OAuth2和HTTP檢索Mendeley的數據

我得到令牌響應,但我無法請求任何內容,程序會引發NullPointerException。

我正在測試與此源代碼here

我也使用Apache OLTU和Apache了HTTPClient

這是我嘗試運行代碼:

static OAuthClientRequest request; 
static OAuthClient oAuthClient; 

static OAuthJSONAccessTokenResponse tokenResponse ; 
static String CATALOG_URL="https://api-oauth2.mendeley.com/oapi/documents/groups?items=10"; 


request = OAuthClientRequest 
      .tokenLocation("https://api-oauth2.mendeley.com/oauth/token") 
      .setClientId(Client_ID) 
      .setClientSecret(Secret) 
      .setGrantType(GrantType.CLIENT_CREDENTIALS) 
      .setScope("all") 
      .buildBodyMessage(); 

System.out.println("is set up"); 

oAuthClient = new OAuthClient(new URLConnectionClient()); 
tokenResponse = oAuthClient.accessToken(request, OAuthJSONAccessTokenResponse.class); 

System.out.println("token is retrieved"); 

HttpGet httpGet = new HttpGet(CATALOG_URL); 
httpGet.setHeader("Authorization", "Bearer " + tokenResponse.getAccessToken()); 

//this is where the Exception is thrown 
     HttpResponse httpResponse = apacheHttpClient.execute(httpGet);   
// 

System.out.println("this is it: "+httpResponse.toString()); 

String responseAsString = EntityUtils.toString(httpResponse.getEntity()); 
System.out.println(responseAsString); 

我得到的例外是:

Exception in thread "main" java.lang.NullPointerException 

我現在問自己爲什麼會發生這種情況。 CATALOG_URL來自Mendeley網站,應返回包含所有公共組的列表的第一頁。

我也試過了Mendeley網站的不同網址。

HttpGet語句可能有什麼問題嗎?

有沒有人有任何提示?

回答

2

您正在收到NullPointerException,因爲您正在使用尚未初始化的變量(apacheHttpClient)。請先嚐試這樣做

apacheHttpClient = ApacheHttpTransport.newDefaultHttpClient(); 
相關問題