0

I am new to java. I have to fetch contacts from google contacts and store it in MySQL table. I got the code from google documentation. I am using Java Servlet without gradle. I got the error while run the code on Servlet class but its work correctly in Main class. I don't know how to solve please Help me !!.

This is my code for your reference:

   
import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.people.v1.PeopleService;
import com.google.api.services.people.v1.PeopleServiceScopes;
import com.google.api.services.people.v1.model.ListConnectionsResponse;
import com.google.api.services.people.v1.model.Name;
import com.google.api.services.people.v1.model.Person;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.security.GeneralSecurityException;
import java.util.Arrays;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class PeopleQuickstart extends HttpServlet{
  private static final String APPLICATION_NAME = "Google People API Java Quickstart";
  private static final JsonFactory JSON_FACTORY = GsonFactory.getDefaultInstance();
  private static final String TOKENS_DIRECTORY_PATH = "tokens";

  /**
   * Global instance of the scopes required by this quickstart.
   * If modifying these scopes, delete your previously saved tokens/ folder.
   */
  private static final List<String> SCOPES = Arrays.asList(PeopleServiceScopes.CONTACTS_READONLY);
  private static final String CREDENTIALS_FILE_PATH = "/client_secret.json";

  /**
   * Creates an authorized Credential object.
   *
   * @param HTTP_TRANSPORT The network HTTP Transport.
   * @return An authorized Credential object.
   * @throws IOException If the credentials.json file cannot be found.
   */
  private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT)
      throws IOException {
    // Load client secrets.
    InputStream in = PeopleQuickstart.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
    if (in == null) {
      throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
    }
    GoogleClientSecrets clientSecrets =
        GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
        HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
        .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
        .setAccessType("offline")
        .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(8888).build();
    System.out.println("completed 1");
    return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
  }

  // ************************ Main Class ******************************
  // public static void main(String... args) throws IOException, GeneralSecurityException {


    public static void getContacts() throws IOException, GeneralSecurityException {
    
    // Build a new authorized API client service.
    final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
    PeopleService service =
        new PeopleService.Builder(HTTP_TRANSPORT, JSON_FACTORY, getCredentials(HTTP_TRANSPORT))
            .setApplicationName(APPLICATION_NAME)
            .build();
    System.out.println("Completed 2");
    // Request 10 connections.
    ListConnectionsResponse response = service.people().connections()
        .list("people/me")
        .setPageSize(10)
        .setPersonFields("names,emailAddresses,phoneNumbers")
        .execute();
    System.out.println("Completed 3");
    // Print display name of connections if available.
    List<Person> connections = response.getConnections();
    // return connections;
    if (connections != null && connections.size() > 0) {
      for (Person person : connections) {
        List<Name> names = person.getNames();
        if (names != null && names.size() > 0) {
          String name = person.getNames().get(0).getDisplayName();
          String email = person.getEmailAddresses().get(0).getValue();
          String phone = person.getPhoneNumbers().get(0).getValue();
          System.out.println("name: " +name+ " email: "+email+ " phone: "+phone);
        } else {
          System.out.println("No names available for connection.");
        }
      }
    } else {
      System.out.println("No connections found.");
    }
  }

  @Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    try {
      getContacts();
    } catch (GeneralSecurityException e) {
      e.printStackTrace();
    }  
  }
}


I Got this error while runing on server Tomcat version 9

Type Exception Report

Message 400 Bad Request

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

com.google.api.client.auth.oauth2.TokenResponseException: 400 Bad Request
POST https://oauth2.googleapis.com/token
{
  "error": "invalid_grant",
  "error_description": "Token has been expired or revoked."
}
    com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:103)
    com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:308)
    com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:324)
    com.google.api.client.auth.oauth2.Credential.executeRefreshToken(Credential.java:547)
    com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:470)
    com.google.api.client.auth.oauth2.Credential.intercept(Credential.java:201)
    com.google.api.client.http.HttpRequest.execute(HttpRequest.java:880)
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
    com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
    PeopleQuickstart.getContacts(PeopleQuickstart.java:86)
    PeopleQuickstart.doPost(PeopleQuickstart.java:111)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:696)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:779)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note The full stack trace of the root cause is available in the server logs.

I am execpting read contact from google people api and store it in DB using java Servlet.

0 Answers0