Hey,
ich versuche Google Kontakte auszulesen über nen Service Account, wie beschrieben in diesem Guide:
https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
bin dem ganzen soweit gefolt und habe meinem Serviceaccount "domain-wide access" delegiert. Wenn ich nun aber mein Programm durchlaufen lasse bekomme ich eine NullPoinnterExeption wie folgt:
Mein Code sieht so aus:
Jemand ne Idee was schief läuft? Das Credential Objekt wird erstellt, aber danach kracht es.
Edit: Nutze IntelliJ btw.
ich versuche Google Kontakte auszulesen über nen Service Account, wie beschrieben in diesem Guide:
https://developers.google.com/identity/protocols/OAuth2ServiceAccount#delegatingauthority
bin dem ganzen soweit gefolt und habe meinem Serviceaccount "domain-wide access" delegiert. Wenn ich nun aber mein Programm durchlaufen lasse bekomme ich eine NullPoinnterExeption wie folgt:
Code:
Exception in thread "main" 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.getFeed(Service.java:1135)
at com.google.gdata.client.Service.getFeed(Service.java:998)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:644)
at com.google.gdata.client.Service.getFeed(Service.java:1017)
at net.wunds.google.GoogleContactsAccess.printAllContacts(GoogleContactsAccess.java:280)
at Main.main(Main.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 1
Mein Code sieht so aus:
Code:
public class Authentifizierung {
private static final String APPLICATION_NAME = "APIProjekt";
private static FileDataStoreFactory dataStoreFactory;
private static HttpTransport httpTransport;
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static Oauth2 oauth2;
public static Credential impersonateUser() throws GeneralSecurityException, IOException {
//System.out.println("Credentials erzeugen start");
//String emailAddress = "apiprojektdienstkonto@qu....iam.gserviceaccount.com";
Set<String> scopes = new HashSet<String>();
scopes.add("https://www.google.com/m8/feeds");
GoogleCredential credential = null;
credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("ProjektDienstkontoMail@quixotic-access....iam.gserviceaccount.com")
.setServiceAccountPrivateKeyFromP12File(new File("./resource/APIProjekt-x1234567891x.p12"))
.setServiceAccountScopes(scopes)
.setServiceAccountUser("user@email.com")
.build();
//System.out.println("Credentials erzeugen ende");
return credential;
}
Code:
public class GoogleContactsAccess {
public static ContactsService createService() {
ContactsService myService = new ContactsService("APIProjekt");
try {
myService.setOAuth2Credentials(Authentifizierung.impersonateUser());
return myService;
} catch (Exception e) {
e.printStackTrace();
}
return myService;
}
public static void printAllContacts()
throws ServiceException, IOException {
ContactsService myService = new ContactsService ("APIProjekt");
URL feedUrl = new URL("https://www.google.com/m8/feeds/contacts/default/full");
ContactFeed resultFeed = myService.getFeed(feedUrl, ContactFeed.class);
// Print the results
System.out.println(resultFeed.getTitle().getPlainText());
for (ContactEntry entry : resultFeed.getEntries()) {
System.out.println("GoogleID?: " + entry.getId());
System.out.println("self id: " + entry.getSelfLink().getHref());
if (entry.hasName()) {
Name name = entry.getName();
if (name.hasFullName()) {
String fullNameToDisplay = name.getFullName().getValue();
if (name.getFullName().hasYomi()) {
fullNameToDisplay += " (" + name.getFullName().getYomi() + ")";
}
System.out.println("\t\t" + fullNameToDisplay);
} else {
System.out.println("\t\t (no full name found)");
}
if (name.hasNamePrefix()) {
System.out.println("\t\t" + name.getNamePrefix().getValue());
} else {
System.out.println("\t\t (no name prefix found)");
}
if (name.hasGivenName()) {
String givenNameToDisplay = name.getGivenName().getValue();
if (name.getGivenName().hasYomi()) {
givenNameToDisplay += " (" + name.getGivenName().getYomi() + ")";
}
System.out.println("\t\t" + givenNameToDisplay);
} else {
System.out.println("\t\t (no given name found)");
}
if (name.hasAdditionalName()) {
String additionalNameToDisplay = name.getAdditionalName().getValue();
if (name.getAdditionalName().hasYomi()) {
additionalNameToDisplay += " (" + name.getAdditionalName().getYomi() + ")";
}
System.out.println("\t\t" + additionalNameToDisplay);
} else {
System.out.println("\t\t (no additional name found)");
}
if (name.hasFamilyName()) {
String familyNameToDisplay = name.getFamilyName().getValue();
if (name.getFamilyName().hasYomi()) {
familyNameToDisplay += " (" + name.getFamilyName().getYomi() + ")";
}
System.out.println("\t\t" + familyNameToDisplay);
} else {
System.out.println("\t\t (no family name found)");
}
if (name.hasNameSuffix()) {
System.out.println("\t\t" + name.getNameSuffix().getValue());
} else {
System.out.println("\t\t (no name suffix found)");
}
} else {
System.out.println("\t (no name found)");
}
System.out.println("Email addresses:");
for (Email email : entry.getEmailAddresses()) {
System.out.print(" " + email.getAddress());
if (email.getRel() != null) {
System.out.print(" rel:" + email.getRel());
}
if (email.getLabel() != null) {
System.out.print(" label:" + email.getLabel());
}
if (email.getPrimary()) {
System.out.print(" (primary) ");
}
System.out.print("\n");
}
System.out.println("IM addresses:");
for (Im im : entry.getImAddresses()) {
System.out.print(" " + im.getAddress());
if (im.getLabel() != null) {
System.out.print(" label:" + im.getLabel());
}
if (im.getRel() != null) {
System.out.print(" rel:" + im.getRel());
}
if (im.getProtocol() != null) {
System.out.print(" protocol:" + im.getProtocol());
}
if (im.getPrimary()) {
System.out.print(" (primary) ");
}
System.out.print("\n");
}
System.out.println("Groups:");
for (GroupMembershipInfo group : entry.getGroupMembershipInfos()) {
String groupHref = group.getHref();
System.out.println(" Id: " + groupHref);
}
System.out.println("Extended Properties:");
for (ExtendedProperty property : entry.getExtendedProperties()) {
if (property.getValue() != null) {
System.out.println(" " + property.getName() + "(value) = " +
property.getValue());
} else if (property.getXmlBlob() != null) {
System.out.println(" " + property.getName() + "(xmlBlob)= " +
property.getXmlBlob().getBlob());
}
}
Link photoLink = entry.getContactPhotoLink();
String photoLinkHref = photoLink.getHref();
System.out.println("Photo Link: " + photoLinkHref);
if (photoLink.getEtag() != null) {
System.out.println("Contact Photo's ETag: " + photoLink.getEtag());
}
System.out.println("Contact's ETag: " + entry.getEtag());
}
}
Code:
public class Main {
public static void main(String[] args) {
try {
GoogleContactsAccess.printAllContacts();
} catch (ServiceException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
Edit: Nutze IntelliJ btw.
Zuletzt bearbeitet: