java - NucleusUserException when creating Google Calendar Request -
i trying authorized requests google calendar api work. seem credential , good, when try use it, i'm told i'm trying persist persisted object.
this code authorization servlet, i'm authorizing user, , performing request (the callback called once, subsequent requests don't require it).
protected void doget(httpservletrequest request, httpservletresponse response) throws servletexception, ioexception { somethingtest(); response.getoutputstream().println("<html><head><title>hello</title></head><body><p>hello world!</p></body></html>"); } void somethingtest(){ event event = new event(); event.setsummary("appointment"); event.setlocation("hq"); arraylist<eventattendee> attendees = new arraylist<eventattendee>(); attendees.add(new eventattendee().setemail(other_attendee)); event.setattendees(attendees); datetime start = datetime.parserfc3339("2012-06-05t10:00:00.000+01:00"); datetime end = datetime.parserfc3339("2012-06-05t11:00:00.000+01:00"); event.setstart(new eventdatetime().setdatetime(start).settimezone("cest")); event.setend(new eventdatetime().setdatetime(end).settimezone("cest")); event.setrecurrence(arrays.aslist("rrule:freq=weekly;until=20120801t100000+01:00")); calendar calendar = calendar.builder(http_transport, json_factory) .setapplicationname("calendarsynctest/1.0") .sethttprequestinitializer(getcredential()).build(); try { // next line throws exception event createdevent = calendar.events().insert("primary", event).execute(); log.trace("event created: " + createdevent.getid()); } catch (ioexception e) { log.warn("exception caught mocking about", e); } } @override protected string getredirecturi(httpservletrequest req) throws servletexception, ioexception { log.trace("getredirecturi()"); genericurl url = new genericurl(req.getrequesturl().tostring()); url.setrawpath("/google-sync/callback"); return url.build(); } @override protected authorizationcodeflow initializeflow() throws servletexception, ioexception { log.trace("initializeflow()"); javax.jdo.persistencemanagerfactory pmf = jdohelper.getpersistencemanagerfactory("transactions-optional"); return new googleauthorizationcodeflow.builder( http_transport, json_factory, client_id, client_secret, collections.singleton(calendarscopes.calendar)).setcredentialstore(new jdocredentialstore(pmf)) .build(); } @override protected string getuserid(httpservletrequest req) throws servletexception, ioexception { return user_email; } and of course exception:
org.datanucleus.exceptions.nucleususerexception: object "com.google.api.client.extensions.jdo.auth.oauth2.jdopersistedcredential@1abf87" being inserted has id [user_email here] yet object id exists in datastore! org.datanucleus.store.xml.xmlpersistencehandler.insertobject(xmlpersistencehandler.java:96) org.datanucleus.state.jdostatemanager.internalmakepersistent(jdostatemanager.java:2376) org.datanucleus.state.jdostatemanager.makepersistent(jdostatemanager.java:2352) org.datanucleus.objectmanagerimpl.persistobjectinternal(objectmanagerimpl.java:1840) org.datanucleus.objectmanagerimpl.persistobjectwork(objectmanagerimpl.java:1689) org.datanucleus.objectmanagerimpl.persistobject(objectmanagerimpl.java:1554) org.datanucleus.api.jdo.jdopersistencemanager.jdomakepersistent(jdopersistencemanager.java:740) org.datanucleus.api.jdo.jdopersistencemanager.makepersistent(jdopersistencemanager.java:765) com.google.api.client.extensions.jdo.auth.oauth2.jdocredentialstore.store(jdocredentialstore.java:47) com.google.api.client.auth.oauth2.credentialstorerefreshlistener.makepersistent(credentialstorerefreshlistener.java:62) com.google.api.client.auth.oauth2.credentialstorerefreshlistener.ontokenresponse(credentialstorerefreshlistener.java:48) com.google.api.client.auth.oauth2.credential.refreshtoken(credential.java:497) com.google.api.client.auth.oauth2.credential.intercept(credential.java:255) com.google.api.client.http.httprequest.execute(httprequest.java:746) com.google.api.client.googleapis.json.googlejsonresponseexception.execute(googlejsonresponseexception.java:182) com.google.api.client.googleapis.services.googleclient.executeunparsed(googleclient.java:170) com.google.api.client.http.json.jsonhttprequest.executeunparsed(jsonhttprequest.java:163) com.google.api.services.calendar.calendar$events$insert.execute(calendar.java:1810) com.zylinc.core.googlesync.test.somethingtest(test.java:78) com.zylinc.core.googlesync.test.doget(test.java:56) javax.servlet.http.httpservlet.service(httpservlet.java:621) com.google.api.client.extensions.servlet.auth.oauth2.abstractauthorizationcodeservlet.service(abstractauthorizationcodeservlet.java:129) javax.servlet.http.httpservlet.service(httpservlet.java:722) i find confusing, because google documentation big mess of deprecated methods don't quite match each other.
Comments
Post a Comment