J'essaie de mettre à jour les contacts de mes utilisateurs Google Apps via l'API Google Contacts et une application Java.
Je suis capable d'obtenir les contacts de cet utilisateur particulier, mais si je veux mettre à jour un certain contact, la mise à jour échoue.
Mon code :
package com.haha;
import java.net.URL;
import com.google.gdata.client.*;
import com.google.gdata.client.Query.CustomParameter;
import com.google.gdata.client.authn.oauth.GoogleOAuthParameters;
import com.google.gdata.client.authn.oauth.OAuthHmacSha1Signer;
import com.google.gdata.client.authn.oauth.OAuthSigner;
import com.google.gdata.client.authn.oauth.OAuthParameters.OAuthType;
import com.google.gdata.client.contacts.*;
import com.google.gdata.data.contacts.ContactEntry;
import com.google.gdata.data.contacts.ContactFeed;
public class ContactsMain {
private static final String APP_NAME = "haha.com";
private static final String CONSUMER_KEY = "haha.com";
private static final String CONSUMER_SECRET = "123456";
private static final String SCOPE_CONTACTS = "https://www.google.com/m8/feeds/";
private static final String FEED_URL_CONTACTS = "https://www.google.com/m8/feeds/contacts/default/base";
private static final String MY_USER = "user@haha.com";
private static final String MAX_RESULTS = "10000";
public static void main(String[] args) {
try {
// Create the service
ContactsService myService = new ContactsService(APP_NAME);
// OAuth
GoogleOAuthParameters oauthParameters = new GoogleOAuthParameters();
oauthParameters.setOAuthConsumerKey(CONSUMER_KEY);
oauthParameters.setOAuthConsumerSecret(CONSUMER_SECRET);
oauthParameters.setScope(SCOPE_CONTACTS);
oauthParameters.setOAuthType(OAuthType.TWO_LEGGED_OAUTH);
OAuthSigner signer = new OAuthHmacSha1Signer();
// Authenticate the service
myService.setOAuthCredentials(oauthParameters, signer);
// Build the query
Query myQuery = new Query(new URL(FEED_URL_CONTACTS));
myQuery.addCustomParameter(new CustomParameter("xoauth_requestor_id", MY_USER));
myQuery.addCustomParameter(new CustomParameter("max-results", MAX_RESULTS));
// Get all contacts
ContactFeed resultFeed = myService.query(myQuery, ContactFeed.class);
for (ContactEntry entry : resultFeed.getEntries()) {
if (entry.hasName() && entry.getName().hasFamilyName()) {
if ((entry.getName().getFamilyName().getValue()).equals("Lastname")) {
System.out.println("Contact 'Lastname' was found");
entry.getName().getFamilyName().setValue("Lastname-EDIT");
entry.update();
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
La sortie console d'Eclipse :
Contact 'Lastname' was found
java.lang.NullPointerException: No authentication header information
at com.google.gdata.util.AuthenticationException.initFromAuthHeader(AuthenticationException.java:96)
at com.google.gdata.util.AuthenticationException.<init>(AuthenticationException.java:67)
at com.google.gdata.client.http.HttpGDataRequest.handleErrorResponse(HttpGDataRequest.java:608)
at com.google.gdata.client.http.GoogleGDataRequest.handleErrorResponse(GoogleGDataRequest.java:564)
at com.google.gdata.client.http.HttpGDataRequest.checkResponse(HttpGDataRequest.java:560)
at com.google.gdata.client.http.HttpGDataRequest.execute(HttpGDataRequest.java:538)
at com.google.gdata.client.http.GoogleGDataRequest.execute(GoogleGDataRequest.java:536)
at com.google.gdata.client.Service.update(Service.java:1563)
at com.google.gdata.client.Service.update(Service.java:1530)
at com.google.gdata.client.GoogleService.update(GoogleService.java:597)
at com.google.gdata.data.BaseEntry.update(BaseEntry.java:639)
at com.haha.ContactsMain.main(ContactsMain.java:60)
La première ligne de la sortie console prouve que les contacts peuvent être lus. La ligne suivante apparaît dans ContactsMain.java:60 :
entry.update();
Quelqu'un sait-il ce que je fais de mal ici ? Dois-je ajouter des jetons à l'objet "entrée" avant de vouloir le mettre à jour ?
Toute aide est très appréciée. Merci beaucoup,
Marco