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.