Giter VIP home page Giter VIP logo

spring-social-google's Introduction

Spring Social Google

Build Status GitHub license GitHub issues

Please note that we recently changed organizations from org.springframework.social to com.github.spring-social due to Maven Central sync issues.

Reference Documentation

You can view an early preview of the reference documentation here. Lots more to come.

Goals

Allow a developer to interact, easily, with Google from the Spring ecosystem.

Installing

Releases

Production releases are available on Maven central.

In Gradle:

compile 'com.github.spring-social:spring-social-google:latest.release'

Or in Maven:

<dependency>
  <groupId>com.github.spring-social</groupId>
  <artifactId>spring-social-google</artifactId>
  <version>${social.version}</version>
</dependency>

Snapshots

Pre-release artifacts are being published frequently, but are NOT intended for production use.

In Gradle:

compile 'com.github.spring-social:spring-social-google:latest.snapshot'

Or in Maven:

<dependency>
  <groupId>com.github.spring-social</groupId>
  <artifactId>spring-social-google</artifactId>
  <version>${social.version}</version>
</dependency>

Building Locally

Run ./gradlew pTML to publish a snapshot to your Maven local repo. To consume:

repositories {
    mavenLocal()
}

dependencies {
    compile 'com.github.spring-social:spring-social-google:latest.integration'
}

Available Functionality

  • Google+
  • Calendar
  • Drive
  • OAuth2
  • Query
  • Tasks

spring-social-google's People

Contributors

blackleg avatar denov avatar f-lopes avatar gabiaxel avatar habuma avatar hectorespert avatar jeffersonaraujo avatar jtsay362 avatar kosarko avatar leon avatar lrkwz avatar martxw avatar mihajul avatar mlaccetti avatar ocarballo avatar secondsun avatar sherdeadlock avatar ui-michal-szwed avatar wabson avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

spring-social-google's Issues

method setUseParametersForClientAuthentication not foud

Hello, thanks for the new version. I just upgrated to 1.0.0.M2 but when the application try to connect with google it throws an exception:

Caused by: java.lang.NoSuchMethodError: org.springframework.social.google.connect.GoogleOAuth2Template.setUseParametersForClientAuthentication(Z)V
    at org.springframework.social.google.connect.GoogleOAuth2Template.<init>(GoogleOAuth2Template.java:39)
    at org.springframework.social.google.connect.GoogleServiceProvider.<init>(GoogleServiceProvider.java:29)
    at org.springframework.social.google.connect.GoogleConnectionFactory.<init>(GoogleConnectionFactory.java:30)

I'm using spring-social 1.0.1. Do I need to upgrade to 1.1.0.M1?

Support for create new post on Home

Tried to use GoogleTemplate().getPlusOperations().insertMoment(moement), but when constructing a moment, not sure which one to use, AddActivity or CreateActivity? either of them doesn't give setter to set the content, for example, a text-based content.

Please advise whether it's the correct way of creating a post.

When searching a phrase with blank spaces the getPage method returns an IllegalStateException

I'm using spring-social 1.1.0.M1 and spring-social-google 1.0.0.M2.
I'm trying to do a search like this:

ActivityQueryBuilder searchResult = google.activityOperations().activityQuery();

            String query="gangnam style";
            searchResult.searchFor(query);
            searchResult.maxResultsNumber(20);
            ActivitiesPage page = searchResult.getPage();

Suppose I made a search with two or more words with spaces like "gangnam style", so I get:

ERROR: [2012-12-18 15:43:46,384] mx.com.intellego.socialmedia.service.search.impl.GoogleSearchSvcImpl - java.net.URISyntaxException: Illegal character in query at index 73: https://www.googleapis.com/plus/v1/activities?maxResults=20&query=gangnam style&
java.lang.IllegalStateException: java.net.URISyntaxException: Illegal character in query at index 73: https://www.googleapis.com/plus/v1/activities?maxResults=20&query=gangnam style&
    at org.springframework.social.google.api.query.impl.ApiQueryBuilderImpl.getPage(ApiQueryBuilderImpl.java:70)

GoogleConnectionFactory cannot get user profile

i saw the lines below
Google api = ((GoogleServiceProvider)getServiceProvider()).getApi(accessGrant.getAccessToken());
UserProfile userProfile = getApiAdapter().fetchUserProfile(api);

but userProfile, unable to get name,firstname, lastname ? how to get user first name ,last name, thumbnail image?

when i use scope https://www.googleapis.com/auth/userinfo.profile, i able to get firstname,lastname, but when i use scope https://www.googleapis.com/auth/plus.me , i cannot get the info

Could not resolve type id 'audio'

the program throws an exception when try to deserialized

[2013-05-28 11:46:56:172] ERROR [GoogleSearchSvcImpl : 76] Could not read JSON: Could not resolve type id 'audio' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
at [Source: org.apache.http.conn.EofSensorInputStream@564425a7; line: 382, column: 7](through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"]); nested exception is org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'audio' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]

Converting a one-time authorization code into an access token/ refresh token on the server

Hi,

Thanks for this great implementation. Not sure why it took so long for the Spring guys to officially add it to the spring social. :-)

I have posted a question on stack overflow which could be placed here as well:

http://stackoverflow.com/questions/25565238/spring-social-google-converting-a-one-time-authorization-code-into-an-access-t

If there is already a solution, it would be nice to have it in the documentation as well. Thanks!

The pageToken attribute is not used in the getComments method

Hi, i'm using spring-social-google to obtain the comments from publications, but when I tried to paginate the results the execution of "commentsPage.getNextPageToken()" was always the same. I check the sourcecode and I found that the pageToken is not used, is it correct?

org.springframework.social.google.api.plus.comment.impl.CommentTemplate

@Override
public CommentsPage getComments(String activityId, String pageToken) {
    return getEntity(ACTIVITIES_URL + activityId + COMMENTS, CommentsPage.class);
}

Contact query returns duplicates

Hi,

I'm trying to rebase to Spring Social 1.1.0M1 and built against the latest Spring Social Google.
When I do a contact query I'm getting a lot of duplicates which is a problem for me. I can't filter those out afterwards because it will create a strange user experience, pagination problems etc

PeoplePage contacts = go.personOperations().contactQuery().fromPage(nextPageToken)
.maxResultsNumber(max).getPage();

I'm also wondering if this has to do with your use of the
https://www-opensocial.googleusercontent.com/api/people/@me/

as opposed to the contacts api feed. The difference between the two is a bit hazy to me anyway.

Move spring-social-google into spring-projects

Hi @GabiAxel

I sent a spring-boot PR (spring-projects/spring-boot#2548) to add spring boot starter for spring social google. But since spring-social-google is not spring projects, they put it on-hold.

Since spring social already has Twitter, Facebook, LinkedIn, I suggest to move spring-social-google into spring-projects. And this project will have better support from spring team. It will be very trivial code changes, since the code base follows the exact same pattern of other spring social projects.

What do you think?

Thanks.

Log connection exceptions

I'm currently trying to get Spring Social Google working with the new Spring Social 1.0.0.M3. I'm having issues but what I'm noticing is that when issues arise in the connection, they are not logged. I would recommend adding warn logging with info to help the developer debug the problem.

Getting the following exceptions when trying to use plusOperations().getPerson(googleId)

Could not read JSON: No enum const class org.springframework.social.google.api.plus.Person$UrlType.CONTRIBUTOR (through reference chain: org.springframework.social.google.api.plus.Person["urls"]->org.springframework.social.google.api.plus.ProfileURL["type"]); nested exception is com.fasterxml.jackson.databind.JsonMappingException: No enum const class org.springframework.social.google.api.plus.Person$UrlType.CONTRIBUTOR (through reference chain: org.springframework.social.google.api.plus.Person["urls"]->org.springframework.social.google.api.plus.ProfileURL["type"])

Using "google.getAccessToken()", still getting java.lang.NullPointerException: No authentication header information

Here is my code:

PeoplePage people;
if(hasText(text)) {
people = google.plusOperations().personQuery()
    .searchFor(text)
    .fromPage(pageToken)
    .getPage();
} else if(hasText(group)) {
int numberOfImportedContacts = 0;
google.isAuthorized();
service.setUserToken(google.getAccessToken());
service.setHeader("GData-Version", "3.0");

URL feedUrl = new URL("http://www.google.com/m8/feeds/");

ContactFeed resultFeed = service.getFeed(feedUrl, ContactFeed.class);

I am still getting "No authentication header information". What am I doing wrong?

Getting unit test failures

org.springframework.social.google.api.plus.PlusTemplateTest > deleteMoment FAILED
    java.lang.AssertionError at PlusTemplateTest.java:177

org.springframework.social.google.api.plus.PlusTemplateTest > insertMoment FAILED
    java.lang.AssertionError at PlusTemplateTest.java:172

org.springframework.social.google.api.plus.PlusTemplateTest > listMoments FAILED
    java.lang.AssertionError at PlusTemplateTest.java:167

24 tests completed, 3 failed
:spring-social-google:test FAILED

Here are the stack traces for the tests that failed:

deleteMoment:

java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.fail(Assert.java:95)
    at org.springframework.social.google.api.plus.PlusTemplateTest.deleteMoment(PlusTemplateTest.java:177)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:55)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:42)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:71)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:103)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
insertMoment:

java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.fail(Assert.java:95)
    at org.springframework.social.google.api.plus.PlusTemplateTest.insertMoment(PlusTemplateTest.java:172)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:55)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:42)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:71)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:103)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)
listMoments:

java.lang.AssertionError
    at org.junit.Assert.fail(Assert.java:86)
    at org.junit.Assert.fail(Assert.java:95)
    at org.springframework.social.google.api.plus.PlusTemplateTest.listMoments(PlusTemplateTest.java:167)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:55)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:42)
    at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:71)
    at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:49)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
    at org.gradle.messaging.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
    at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
    at org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:103)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
    at org.gradle.messaging.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
    at org.gradle.messaging.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:355)
    at org.gradle.internal.concurrent.DefaultExecutorFactory$StoppableExecutorImpl$1.run(DefaultExecutorFactory.java:66)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:722)

Readonly access to contacts

Hi,

I got some complaints from users about using the https://www.google.com/m8/feeds/ scope. The message they see from Google is that we want to "manage their contacts". This suggests to them all sorts of scary stuff.

There is also a readonly scope available: https://www.googleapis.com/auth/contacts.readonly with a corresponding "read your contacts" message.

However, this throws a 401 unsupported oauth scope exception when interacting with the contacts api. I wonder if this is something worthy of making flexible?

NullPointerException: No authentication header information while using Google API

Description
Intended to import all the google contacts associated with an authenticated user.
As I cannot see any support on the API provided for this functionality (the instructions of your website -- http://www.gabiaxel.com/2011/09/spring-social-meets-google-apis.html-- may be based on an old version as the class 'GoogleOperations' is missing). I decided to use the google contact api via the method 'applyAuthentication', as follows:

The following code is executed after user is authenticated (application is a clone of this repository):

ContactsService contactsService = new ContactsService("my application");
google.applyAuthentication(contactsService);
URL feedUrl = feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
ContactFeed resultFeed = resultFeed = contactsService.getFeed(feedUrl, ContactFeed.class); <-- Line causing the error
for (ContactEntry entry : resultFeed.getEntries()) {
     String fullName = entry.getName().getFullName().getValue();
     String email = null;
     for(Object e : entry.getEmailAddresses()) 

Resulting in the following exception

java.lang.NullPointerException: No authentication header information
    com.google.gdata.util.AuthenticationException.initFromAuthHeader(AuthenticationException.java:96)
    com.google.gdata.util.AuthenticationException.<init>(AuthenticationException.java:67)
    com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:596)
    com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:563)
    com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:550)
    com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:530)
    com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:535)
    com.google.gdata.client.Service.getFeed(Service.java:1135)
    com.google.gdata.client.Service.getFeed(Service.java:998)

any idea how to fix this? Ideally i would like to use your library for the whole task ie. import all the contacts without using the gdata dependency, but as I said above, I dont see any method for it.

Thanks

Tests failed

When I issued
./gradlew build
I received the following errors, which prevented the building and as consequence, the trying of the project:

org.springframework.social.google.api.plus.PlusTemplateTest > deleteMoment FAILED
    java.lang.AssertionError at PlusTemplateTest.java:177

org.springframework.social.google.api.plus.PlusTemplateTest > insertMoment FAILED
    java.lang.AssertionError at PlusTemplateTest.java:172

org.springframework.social.google.api.plus.PlusTemplateTest > listMoments FAILED
    java.lang.AssertionError at PlusTemplateTest.java:167

24 tests completed, 3 failed
:spring-social-google:test FAILED

FAILURE: Build failed with an exception.

GAE Compatibility

In order to make the library google-appengine compatible, httpClient dependency has to be removed

Missing parameter key= for Simple API Access queries

Hi,

I'm trying to search activities without user OAuth authorization (Simple API Access).

Currently I use :
ActivityQueryBuilder activityQuery = api.activityOperations().activityQuery();
activityQuery.searchFor("java");
activityQuery.orderBy(ActivitiesOrder.RECENT);
activityQuery.maxResultsNumber(20);
activityQuery.getPage();

which send this query :
https://www.googleapis.com/plus/v1/activities?maxResults=20&query=java&orderBy=recent

But according to https://developers.google.com/+/api/oauth#apikey I should be able get results for this query if a "key" parameter is added

This request works without any other authorization :
https://www.googleapis.com/plus/v1/activities?maxResults=20&query=java&orderBy=recent&key=xxxxxx

403 for https://www.googleapis.com/oauth2/v2/userinfo

I am closely following the quickstart app. But still I run into a 403.

Here is a snippet from my log:

12:22:07.147 DEBUG o.s.web.client.RestTemplate:78 - Created POST request for "https://accounts.google.com/o/oauth2/token"
12:22:07.176 DEBUG o.s.web.client.RestTemplate:574 - Setting request Accept header to [application/json, application/*+json]
12:22:07.177 DEBUG o.s.web.client.RestTemplate:648 - Writing [{client_id=[644902935757.apps.googleusercontent.com], client_secret=[lceYhVTHrs17cjAghWBSbbkN], code=[4/rfuLIKajQsh39veII5a4cikOjMev.0havajV64jsaOl05ti8ZT3Ybvz2_fAI], redirect_uri=[http://localhost:8091/metronome/connect/google], grant_type=[authorization_code]}] as "application/x-www-form-urlencoded" using [org.springframework.http.converter.FormHttpMessageConverter@6d059fa4]
12:22:07.799 DEBUG o.s.web.client.RestTemplate:511 - POST request for "https://accounts.google.com/o/oauth2/token" resulted in 200 (OK)
12:22:07.801 DEBUG o.s.web.client.RestTemplate:91 - Reading [interface java.util.Map] as "application/json" using [org.springframework.http.converter.json.MappingJacksonHttpMessageConverter@c838bfb]
12:22:10.691 DEBUG o.s.web.client.RestTemplate:78 - Created GET request for "https://www.googleapis.com/oauth2/v2/userinfo"
12:22:10.702 DEBUG o.s.web.client.RestTemplate:574 - Setting request Accept header to [application/json, application/*+json]
12:22:11.198 WARN  o.s.web.client.RestTemplate:524 - GET request for "https://www.googleapis.com/oauth2/v2/userinfo" resulted in 403 (Forbidden); invoking error handler
12:22:11.200 WARN  o.s.s.connect.web.ConnectSupport:133 - HttpClientErrorException while completing connection: 403 Forbidden
12:22:11.200 WARN  o.s.s.connect.web.ConnectSupport:134 -       Response body: {
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "insufficientPermissions",
    "message": "Insufficient Permission"
   }
  ],
  "code": 403,
  "message": "Insufficient Permission"
 }
}

ExpiredAuthorizationException

org.springframework.social.ExpiredAuthorizationException: The authorization has expired.

How can you recover from that? Is there some way to refresh the authorization?

ContactExtractor extracts non-existing images

The ContactExtractor seems to set the pictureUrl based on the imageUrl specified in the XML Element. However, this imageUrl is always there. Only the existence of the gd:etag determines if there is an actual image associated. If this is not there, the pictureUrl should be null

Saving refreshToken

I had to override the buildAuthorizeUrl of the OAuth2Template class inside GoogleOAuth2Template to add a request for the Google refreshToken. That works fine. However, once the refresh token is used, the refreshToken is changed to null by the framework; after calling connection.refresh(), the refreshToken value is wiped out and there is no way to manually update the Connection object with the old reusable refreshToken before calling connectionRepository.updateConnection(connection). I want to be able to update the connection in the userconnection table to retain the old refreshToken. Is there an easy way to populate the refreshToken field without having to write extra database code to do it? Preferably I would have liked to just call a public setter method on the Connection object.

java.lang.NoSuchMethodError: org.springframework.web.client.RestTemplate.getInterceptors()[Lorg/springframework/http/client/ClientHttpRequestInterceptor

I'm getting this error while final stage of interceptors call.
I use:
spring-social- -1.0.1.BUILD-SNAPSHOT
spring-social-google-0.0.1-SNAPSHOT.jar
<org.springframework-version>3.1.0.M2</org.springframework-version>

I already read this http://forum.springsource.org/showthread.php?113622-New-Project-Spring-Social-Google/
but as you see fix is not working.

java.lang.NoSuchMethodError: org.springframework.web.client.RestTemplate.getInterceptors()[Lorg/springframework/http/client/ClientHttpRequestInterceptor;
at org.springframework.social.google.api.impl.GoogleTemplate.(GoogleTemplate.java:48)
at org.springframework.social.google.connect.GoogleServiceProvider.getApi(GoogleServiceProvider.java:15)
at org.springframework.social.google.connect.GoogleServiceProvider.getApi(GoogleServiceProvider.java:7)
at org.springframework.social.connect.support.OAuth2Connection.initApi(OAuth2Connection.java:132)

I will appreciate for any help or fix.

how to apply accesstoken

applyAccessToken was removed but the documentation was not updated to explain how to apply the accesstoken now.

"album" object can't be mapped to an object

Hi, i'm trying to do a search in google+ but when I reach this line:

ActivitiesPage page = searchResult.getPage();

the program throws an exception (it seems like there are new attachment types objects in G+) :

Could not read JSON: Could not resolve type id 'album' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@12bc418; line: 339, column: 7] (through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"]); nested exception is org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'album' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@12bc418; line: 339, column: 7] (through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"])
org.springframework.http.converter.HttpMessageNotReadableException: Could not read JSON: Could not resolve type id 'album' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@12bc418; line: 339, column: 7] (through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"]); nested exception is org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'album' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@12bc418; line: 339, column: 7] (through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"])
    at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:127)
    at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153)
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:81)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:401)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:199)
    at org.springframework.social.google.api.query.impl.ApiQueryBuilderImpl.getPage(ApiQueryBuilderImpl.java:64)
    at mx.com.intellego.socialmedia.service.search.impl.GoogleSearchSvcImpl.search(GoogleSearchSvcImpl.java:59)
    at mx.com.intellego.socialmedia.service.search.impl.GoogleSearchSvcImpl$$FastClassByCGLIB$$78d02d80.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.aspectj.MethodInvocationProceedingJoinPoint.proceed(MethodInvocationProceedingJoinPoint.java:91)
    at mx.com.intellego.socialmedia.util.exception.SocialMediaExceptionDescription.monitorCall(SocialMediaExceptionDescription.java:45)
    at sun.reflect.GeneratedMethodAccessor29.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethodWithGivenArgs(AbstractAspectJAdvice.java:621)
    at org.springframework.aop.aspectj.AbstractAspectJAdvice.invokeAdviceMethod(AbstractAspectJAdvice.java:610)
    at org.springframework.aop.aspectj.AspectJAroundAdvice.invoke(AspectJAroundAdvice.java:65)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:90)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at mx.com.intellego.socialmedia.service.search.impl.GoogleSearchSvcImpl$$EnhancerByCGLIB$$d26a0f85.search(<generated>)
    at mx.com.intellego.socialmedia.service.search.impl.GoogleSearchSvcImpl$$FastClassByCGLIB$$78d02d80.invoke(<generated>)
    at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:191)
    at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:689)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)
    at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:622)
    at mx.com.intellego.socialmedia.service.search.impl.GoogleSearchSvcImpl$$EnhancerByCGLIB$$ccd16bd0.search(<generated>)
    at mx.com.intellego.socialmedia.util.profile.job.ProfileQuerySearchJob.getPublications(ProfileQuerySearchJob.java:283)
    at mx.com.intellego.socialmedia.util.profile.job.ProfileQuerySearchJob.execute(ProfileQuerySearchJob.java:136)
    at org.quartz.core.JobRunShell.run(JobRunShell.java:213)
    at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:557)
Caused by: org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'album' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
 at [Source: sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@12bc418; line: 339, column: 7] (through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"])
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownTypeException(StdDeserializationContext.java:273)
    at org.codehaus.jackson.map.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:117)
    at org.codehaus.jackson.map.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:74)
    at org.codehaus.jackson.map.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:89)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:219)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2723)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1914)
    at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:124)
    ... 37 more

Not getting the 1.1.0M1 from the repository

Hi Gabi,
As i am using spring 3.2.1.RELEASE and Spring social 1.0.2.RELEASE, So, First I tried with spring-social-google 1.0.0M1, but I was getting issue, so gone through this issues list, and got the reference for 1.1.0M1, but not able to fetch this from this repository below:-

spring.social.google Spring Social Google https://github.com/GabiAxel/maven/raw/master/

Please help me ...................

Source for Contacts example

I notice the live example includes a search for Contacts under the Google+ tab yet the source code does not include that part of the example. Can that be added to the source?

Thanks,

Dean

Compilation error

I have compilation error:

[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Compilation failure
/home/spoonman/dev/spring-social-google/spring-social-google/spring-social-google/src/main/java/org/springframework/social/google/api/impl/ApiEnumDeserializer.java:[57,24] incompatible types
found : java.lang.Enum
required: T

/usr/lib/jvm/java-6-sun/bin/java -version
java version "1.6.0_26"
Java(TM) SE Runtime Environment (build 1.6.0_26-b03)
Java HotSpot(TM) Server VM (build 20.1-b02, mixed mode)

providerServiceId comes back as email

In GoogleAdapter fetchUserProfile:

        .setUsername(profile.getId())

Because this is what's used to create the providerServiceId in:

protected String extractProviderUserId(AccessGrant accessGrant) {
    Google api = ((GoogleServiceProvider)getServiceProvider()).getApi(accessGrant.getAccessToken());
    UserProfile userProfile = getApiAdapter().fetchUserProfile(api);
    return userProfile.getUsername();
}

GoogleConnectionFactory#extractProviderUserId returns null

The GoogleConnectionFactory does not override the "extractProviderUserId" method, which means that the factory does not return the UserId (username) of the connected user.

I personally added the following to the GoogleConnectionFactory class:

   @Override
protected String extractProviderUserId(AccessGrant accessGrant) {
    Google api=((GoogleServiceProvider)getServiceProvider()).getApi(accessGrant.getAccessToken());
    UserProfile userProfile=getApiAdapter().fetchUserProfile(api);
    return userProfile.getUsername();
}

403 Forbidden

I get a 403 forbidden error when testing out this piece of code. I have a valid, authorized, non-expired connection. Am I doing something wrong?

PeoplePage peoplePage = connection.getApi().plusOperations().searchPeople("Troutman", "0");

403 Forbidden
at org.springframework.web.client.DefaultResponseErrorHandler.handleError(DefaultResponseErrorHandler.java:88)
at org.springframework.web.client.RestTemplate.handleResponseError(RestTemplate.java:533)
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:489)
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:461)
at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:229)
at org.springframework.social.google.api.query.impl.ApiQueryBuilderImpl.getPage(ApiQueryBuilderImpl.java:78)
at org.springframework.social.google.api.plus.impl.PlusTemplate.searchPeople(PlusTemplate.java:109)

Type 'hangout' couldn't be resolved

Using spring-social 1.1.0.M1 and spring-social-google 1.0.0.M2
After doing a search of "mario" I'm getting this response:

org.codehaus.jackson.map.JsonMappingException: Could not resolve type id 'hangout' into a subtype of [simple type, class org.springframework.social.google.api.plus.activity.Attachment]
 at [Source: org.apache.http.conn.EofSensorInputStream@1f4899c; line: 376, column: 7] (through reference chain: org.springframework.social.google.api.plus.activity.ActivitiesPage["items"]->org.springframework.social.google.api.plus.activity.Activity["object"]->org.springframework.social.google.api.plus.activity.ActivityObject["attachments"])
    at org.codehaus.jackson.map.JsonMappingException.from(JsonMappingException.java:163)
    at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownTypeException(StdDeserializationContext.java:273)
    at org.codehaus.jackson.map.jsontype.impl.TypeDeserializerBase._findDeserializer(TypeDeserializerBase.java:117)
    at org.codehaus.jackson.map.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:82)
    at org.codehaus.jackson.map.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:52)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:219)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:217)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:194)
    at org.codehaus.jackson.map.deser.std.CollectionDeserializer.deserialize(CollectionDeserializer.java:30)
    at org.codehaus.jackson.map.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:299)
    at org.codehaus.jackson.map.deser.SettableBeanProperty$FieldProperty.deserializeAndSet(SettableBeanProperty.java:579)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:697)
    at org.codehaus.jackson.map.deser.BeanDeserializer.deserialize(BeanDeserializer.java:580)
    at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.java:2732)
    at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1923)
    at org.springframework.http.converter.json.MappingJacksonHttpMessageConverter.readInternal(MappingJacksonHttpMessageConverter.java:124)
    at org.springframework.http.converter.AbstractHttpMessageConverter.read(AbstractHttpMessageConverter.java:153)
    at org.springframework.web.client.HttpMessageConverterExtractor.extractData(HttpMessageConverterExtractor.java:81)
    at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:446)
    at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:415)
    at org.springframework.web.client.RestTemplate.getForObject(RestTemplate.java:213)
    at org.springframework.social.google.api.query.impl.ApiQueryBuilderImpl.getPage(ApiQueryBuilderImpl.java:68)

Proposed support for Google Calendar

I've put together a branch of spring-social-google and spring-social-google-example to add in Google Calendar support, for a project I'm working on. They're my "add_calendar" branches.
I was wondering if you'd like me to submit a Pull Request?

My needs have mainly been read-only. As such, it does comprehensive calendar and event listing.
I also included simple event creation and deletion, and update for a subset of properties.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.