谷歌+域名API快速启动java无法正常工作

我正在尝试使用Google +中提供的域API,我正在尝试使用域范围委派快速启动java我已按照步骤操作,我也请求我的域管理员授予对我创建的项目的访问权限在控制台中,恢复我可以编译java文件,但是当我运行时,我得到一个404错误,这里是代码:

/* * Copyright 2013 Google Inc. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.google.plus.samples.quickstart.domains; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.jackson.JacksonFactory; import com.google.api.services.plusDomains.PlusDomains; import com.google.api.services.plusDomains.model.Acl; import com.google.api.services.plusDomains.model.Activity; import com.google.api.services.plusDomains.model.PlusDomainsAclentryResource; import com.google.api.services.plusDomains.model.Person; import java.io.IOException; import java.security.GeneralSecurityException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Simple program to demonstrate the Google+ Domains API. * * This program shows how to authenticate an app for domain-wide delegation and how * to complete an activities.insert API call. For details on how to authenticate on * a per-user basis using OAuth 2.0, or for examples of other API calls, please see * the documentation at https://developers.google.com/+/domains/. * * @author joannasmith@google.com (Joanna Smith) */ public class DomainDelegation { /** * Update SERVICE_ACCOUNT_EMAIL with the email address of the service account for the client ID * created in the developer console. */ private static final String SERVICE_ACCOUNT_EMAIL = "example@developer.gserviceaccount.com"; /** * Update SERVICE_ACCOUNT_PKCS12_FILE_PATH with the file path to the private key file downloaded * from the developer console. */ private static final String SERVICE_ACCOUNT_PKCS12_FILE_PATH = "file-privatekey.p12"; /** * Update USER_EMAIL with the email address of the user within your domain that you would like * to act on behalf of. */ private static final String USER_EMAIL = "example@email.com"; /** * plus.me and plus.stream.write are the scopes required to perform the tasks in this quickstart. * For a full list of available scopes and their uses, please see the documentation. */ private static final List SCOPE = Arrays.asList( "https://www.googleapis.com/auth/plus.me", "https://www.googleapis.com/auth/plus.stream.write", "https://www.googleapis.com/auth/plus.circles.read", "https://www.googleapis.com/auth/plus.profiles.read", "https://www.googleapis.com/auth/plus.stream.read", "https://www.googleapis.com/auth/userinfo.profile"); /** * Builds and returns a Plus service object authorized with the service accounts * that act on behalf of the given user. * * @return Plus service object that is ready to make requests. * @throws GeneralSecurityException if authentication fails. * @throws IOException if authentication fails. */ private static PlusDomains authenticate() throws GeneralSecurityException, IOException { System.out.println(String.format("Authenticate the domain for %s", USER_EMAIL)); HttpTransport httpTransport = new NetHttpTransport(); JsonFactory jsonFactory = new JacksonFactory(); // Setting the sub field with USER_EMAIL allows you to make API calls using the special keyword // 'me' in place of a user id for that user. GoogleCredential credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) .setServiceAccountScopes(SCOPE) .setServiceAccountUser(USER_EMAIL) .setServiceAccountPrivateKeyFromP12File( new java.io.File(SERVICE_ACCOUNT_PKCS12_FILE_PATH)) .build(); System.out.println("credential " + credential); // Create and return the Plus service object PlusDomains service = new PlusDomains.Builder(httpTransport, jsonFactory, credential).build(); return service; } /** * Create a new post on behalf of the user associated with the credential object of the service, * restricted to the domain. * * @param service Plus service object that is ready to make requests. * @throws IOException if the insert operation fails or if authentication fails. * @throws GeneralSecurityException if authentication fails. */ public static void main(String[] args) throws Exception { // Create an authorized API client PlusDomains service = authenticate(); // Set the user's ID to 'me': requires the plus.me scope String userId = "me"; String msg = "Happy Monday! #caseofthemondays"; System.out.println("Inserting activity " + service); // Create the audience of the post PlusDomainsAclentryResource res = new PlusDomainsAclentryResource(); // Share to the domain res.setType("domain"); List aclEntries = new ArrayList(); aclEntries.add(res); Acl acl = new Acl(); acl.setItems(aclEntries); // Required, this does the domain restriction acl.setDomainRestricted(true); Activity activity = new Activity() .setObject(new Activity.PlusDomainsObject().setOriginalContent(msg)) .setAccess(acl); //System.out.println("ativity " + activity); activity = service.activities().insert(userId, activity).execute(); System.out.println(activity); } } 

很可能像电子邮件和密钥文件这样的数据我在我的代码中是正确的,这是我得到的错误:

 Authenticate the domain for example@email.com credential com.google.api.client.googleapis.auth.oauth2.GoogleCredential@2b275d39 04-dic-2013 8:59:50 com.google.api.client.googleapis.services.AbstractGoogleClient  ADVERTENCIA: Application name is not set. Call Builder#setApplicationName. Inserting activity com.google.api.services.plusDomains.PlusDomains@46b8c8e6 Exception in thread "main" com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found Not Found at com.google.api.client.googleapis.json.GoogleJsonResponseException.from(GoogleJsonResponseException.java:145) at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:113) at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(AbstractGoogleJsonClientRequest.java:40) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(AbstractGoogleClientRequest.java:312) at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:1045) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:410) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:343) at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:460) at com.google.plus.samples.quickstart.domains.DomainDelegation.main(DomainDelegation.java:154) 

我迷路了,如果有人能帮助我,我将不胜感激。

看来包含PlusDomains.builder的行现在需要调用setApplicationName:

 PlusDomains service = new PlusDomains.Builder(httpTransport, jsonFactory, credential) .setApplicationName('MyDomainsDemo') .build(); 

我今天测试了Java样本并且它可以工作。 这些说明需要一些与API控制台中标签更改相关的次要更新,但如果您正确配置应用程序,则可以开始使用。

404错误很可能是由错误配置的客户端引起的,并且不是示例中的问题。 以下屏幕截图应有助于获取正确的凭据。 创建服务帐户时,您将在下面突出显示一个新区域:

Java Quickstart凭据的来源

确保服务帐户下的客户端ID与从管理控制台执行域范围委派时添加的客户端ID相同。 以下屏幕截图显示了客户端ID(上一屏幕截图中的第一个字段)的位置:

在此处输入图像描述

最后,请确保src/com/google/plus/samples/quickstart/domains/DomainDelegation.java中配置的电子邮件地址与您服务帐户中的电子邮件相匹配。

如果您使用的是经典API控制台,则需要在项目中添加服务帐户,从API Access – >创建另一个客户端ID … – >服务帐户执行此操作。 这些值将来自添加的部分:

在此处输入图像描述

这个有效!

与那些jar子

antlr-2.7.7.jar jackson-core-asl-1.9.11.jar aopalliance-1.0.jar javassist-3.15.0-GA.jar commons-email-1.3.2.jar jboss-logging-3.1.0.GA .jar commons-logging-1.1.1.jar jboss-transaction-api_1.1_spec-1.0.0.Final.jar dom4j-1.6.1.jar jsr305-1.3.9.jar google-api-client-1.17.0- rc.jar jstl-1.2.jar google-api-client-jackson2-1.17.0-rc-sources.jar mail-1.4.1.jar google-api-services-calendar-v3-rev87-1.19.0.jar mysql -connector-java-5.1.22.jar google-collections-1.0-rc2.jar spring-aop-3.2.2.RELEASE.jar google-http-client-1.17.0-rc.jar spring-beans-3.2.2 .RELEASE.jar google-http-client-jackson-1.17.0-rc.jar spring-context-3.2.2.RELEASE.jar google-oauth-client-1.17.0-rc.jar spring-core-3.2.2 .RELEASE.jar google-oauth-client-servlet-1.17.0-rc.jar spring-expression-3.2.2.RELEASE.jar hibernate-commons-annotations-4.0.1.Final.jar spring-jdbc-3.2.2 .RELEASE.jar hibernate-core-4.1.10.Final.jar spring-orm-3.2.2.RELEASE.jar hibernate-jpa-2.0-api-1.0.1.Final.jar spring-tx-3.2.2.RELEASE .jar hsqldb-2.2.9.jar sprin g-web-3.2.2.RELEASE.jar httpclient-4.0.1.jar spring-webmvc-3.2.2.RELEASE.jar httpcore-4.0.1.jar transaction-api-1.1.jar jackson-core-2.1.3 。jar

 import java.io.File; import java.io.IOException; import java.security.GeneralSecurityException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.TimeZone; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.jackson.JacksonFactory; import com.google.api.client.util.DateTime; import com.google.api.services.calendar.Calendar; import com.google.api.services.calendar.model.Event; import com.google.api.services.calendar.model.EventAttendee; import com.google.api.services.calendar.model.EventDateTime; 

..

 public class GoogleCalNotificator { public static void addEvent(TurnosRepository repo, String fecha, String inicio, String fin, String paciente, String cliente) { HttpTransport httpTransport = new NetHttpTransport(); JacksonFactory jsonFactory = new JacksonFactory(); String scope = "https://www.googleapis.com/auth/calendar"; GoogleCredential credential = null; try { credential = new GoogleCredential.Builder() .setTransport(httpTransport) .setJsonFactory(jsonFactory) .setServiceAccountId( "xxxxxxxxxxx@developer.gserviceaccount.com") .setServiceAccountUser("xxxxxxxxx@gmail.com") .setServiceAccountScopes(Arrays.asList(scope)) .setServiceAccountPrivateKeyFromP12File( new File(repo.getParameter("P12_FILE"))) //p12 from gooleapiuser .build(); } catch (GeneralSecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } Calendar service = new Calendar.Builder(httpTransport, jsonFactory, credential).setApplicationName("appname").build(); // ----------------- Event event = new Event(); event.setSummary("text " ); event.setLocation("loc "); ArrayList attendees = new ArrayList(); attendees.add(new EventAttendee().setEmail("xxxxxx@gmail.com")); // ... event.setAttendees(attendees); Date startDate = null; Date endDate = null; try { startDate = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(fecha + " " + inicio); endDate = new SimpleDateFormat("dd/MM/yyyy HH:mm").parse(fecha + " " + fin); } catch (ParseException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } DateTime start = new DateTime(startDate, TimeZone.getTimeZone("America/Argentina/Buenos_Aires")); event.setStart(new EventDateTime().setDateTime(start)); DateTime end = new DateTime(endDate, TimeZone.getTimeZone("America/Argentina/Buenos_Aires")); event.setEnd(new EventDateTime().setDateTime(end)); // lo pongo en el calendario de julia try { Event createdEvent = service .events() .insert("xxxxxxxxidfromcalendar@group.calendar.google.com", event).execute(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

我最近遇到了这个问题。 对我来说,解决方案是更新库(示例附带了lib /文件夹中的一堆过时的JAR)。

我的maven依赖:

   com.google.api-client google-api-client 1.23.0   com.google.apis google-api-services-plusDomains v1-rev449-1.23.0   com.google.http-client google-http-client-jackson 1.23.0