невозможно обновить / удалить / получить события календаря с помощью API Java GAE с двухсторонней аутентификацией - PullRequest
0 голосов
/ 02 ноября 2011

Привет! Я пишу инструмент для создания коннекторов, используя GAE Java, который добавляет, обновляет, удаляет и извлекает события календаря. Я использую двухстороннюю аутентификацию для того же самого. Я могу успешно добавлять новые события, используя двухстороннюю аутентификацию, но не могу обновлять, удалять или извлекать события, используя то же самое.

Выдает следующую ошибку, когда я пытаюсь выполнить операцию обновления / удаления / получения для события календаря.

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="
                                        + "u...@domain.com";
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="                                       +
"usern...@domain.com";

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(); 

1 Ответ

0 голосов
/ 02 ноября 2011

Одной из возможных причин может быть то, что электронная почта пользователя не имеет URL-адреса (@ должна быть закодирована как% 40). Используйте этот код, который автоматически обрабатывает кодировку URL:

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

вместо добавления параметра вручную.

Другая возможная причина заключается в том, что ваше приложение не предоставило доступ к календарю администратором домена Служб Google, к которому принадлежит пользователь. Вы можете проверить это на этой странице: https://www.google.com/a/cpanel/DOMAIN-NAME/ManageOauthClients.

...