Note that there are some explanatory texts on larger screens.

plurals
  1. PONucleusUserException when creating Google Calendar Request
    primarykey
    data
    text
    <p>I am trying to get authorized requests to the Google Calendar API to work. I seem to get a credential and all is good, but when I try to use it, I'm told that I'm trying to persist an already persisted object.</p> <p>This is the code for the authorization servlet, where I'm authorizing the user, and performing the request (the callback was called once, subsequent requests don't require it).</p> <pre><code>protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { somethingTest(); response.getOutputStream().println("&lt;html&gt;&lt;head&gt;&lt;title&gt;Hello&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;p&gt;Hello world!&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;"); } void somethingTest(){ Event event = new Event(); event.setSummary("appointment"); event.setLocation("HQ"); ArrayList&lt;EventAttendee&gt; attendees = new ArrayList&lt;EventAttendee&gt;(); 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; } </code></pre> <p>And of course the exception:</p> <pre><code>org.datanucleus.exceptions.NucleusUserException: Object "com.google.api.client.extensions.jdo.auth.oauth2.JdoPersistedCredential@1abf87" being inserted has id [USER_EMAIL HERE] yet an object with this id already exists in the 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) </code></pre> <p>I find all this very confusing, especially because the Google documentation is a big mess of deprecated methods that don't quite match each other.</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload