2011-11-02 26 views
0

嗨我正在編寫一個使用GAE Java的連接器工具,它添加,更新,刪除和檢索日曆events.I使用2腿認證相同。我能夠使用雙方認證成功添加新事件,但無法使用相同的更新,刪除或檢索事件。使用GAE Java API無法更新/刪除/檢索日曆事件使用雙腿認證使用GAE Java API

當我嘗試對日曆事件進行更新/刪除/檢索操作時,它會給出以下錯誤。

com.google.gdata.util.AuthenticationException:OK

<HTML> 
<HEAD> 
<TITLE>Token invalid - Invalid AuthSub token.</TITLE> 
</HEAD> 
<BODY BGCOLOR="#FFFFFF" TEXT="#000000"> 
<H1>Token invalid - Invalid AuthSub token.</H1> 
<H2>Error 401</H2> 
</BODY> 
</HTML> 

相同的代碼工作正常,如果我刪除OAuth的特定代碼,只需使用service.setUserCredentials()方法。

請幫我解決這個問題。請在 的情況下恢復原狀,需要更多相關信息。

在此先感謝。

-Nirzari 下面是代碼片段

//Code for getCalendarEvents 
String url = FEED_URL + "?xoauth_requestor_id=" 
             + "[email protected]"; 
URL postUrl = new URL(url); 
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); 
       oauthParameters.setScope(Scope); 
       oauthParameters.setOAuthConsumerKey(ConsumerKey); 
       oauthParameters.setOAuthConsumerSecret(secret); 

CalendarService myService = new CalendarService("getAppointments"); 
OAuthSigner signer = new OAuthHmacSha1Signer(); 
myService.setOAuthCredentials(oauthParameters, signer); 
CalendarQuery myQuery = new CalendarQuery(postUrl); 
CustomParameter customParameter = new CustomParameter("showdeleted", 
"true"); 
myQuery.addCustomParameter(customParameter); 
CalendarEventFeed resultFeed = myService.query(myQuery, 
             CalendarEventFeed.class); 

//Code for Update Appointment 
String url = FEED_URL + "?xoauth_requestor_id="          + 
"[email protected]"; 

URL postUrl = new URL(url); 
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters(); 
oauthParameters.setScope(Scope); 
oauthParameters.setOAuthConsumerKey(ConsumerKey); 
oauthParameters.setOAuthConsumerSecret(secret); 
CalendarService myService = new CalendarService("updateAppointment"); 
OAuthSigner signer = new OAuthHmacSha1Signer(); 
myService.setOAuthCredentials(oauthParameters, signer); 
CalendarQuery myQuery = new CalendarQuery(postUrl); 
myQuery.setExtendedPropertyQuery(new ExtendedPropertyMatch(
             "Prop_Name", value)); 
CalendarEventFeed resultFeed = myService.getFeed(myQuery, 
             CalendarEventFeed.class); 

if (resultFeed != null && resultFeed.getEntries().size() > 0) { 
CalendarEventEntry matchEntry = (CalendarEventEntry) resultFeed 
               .getEntries().get(0); 
updateCalendarEntry(matchEntry, description, title, start, end,    startTime, endTime, location, priavte, guestList); 
matchEntry.update(); 

回答

0

其中一個可能的原因可能是用戶的電子郵件沒有URL編碼(@應編碼爲%40)。使用此代碼可自動處理URL編碼:

query.addCustomParameter(new CustomParameter("xoauth_requestor_id", userEmail)); 

而不是手動追加參數。

另一個可能的原因是您的應用沒有授權用戶所屬的Google Apps域的管理員訪問日曆。您可以在此頁面查看:https://www.google.com/a/cpanel/DOMAIN-NAME/ManageOauthClients

+0

非常感謝您的回覆,添加了query.addCustomParameter(新的CustomParameter(「xoauth_requestor_id」,userEmail));只是爲我工作。 – user1024966

+0

我很樂意提供幫助。可惜你不能投票作爲新手:) – lukelazarovic

相關問題