Typical use is to provide functionality like removing persistence of the access token from
the data store. Implementations can assume proper thread synchronization is already taken care
of inside Credential#refreshToken(). Implementations can also assume that Credential#setAccessToken, and Credential#setExpiresInSeconds have already been called
previously with null to clear their values.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Hard to understand","hardToUnderstand","thumb-down"],["Incorrect information or sample code","incorrectInformationOrSampleCode","thumb-down"],["Missing the information/samples I need","missingTheInformationSamplesINeed","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-07 UTC."],[],[],null,["# Class DataStoreCredentialRefreshListener (1.39.0)\n\nVersion latestkeyboard_arrow_down\n\n- [1.39.0 (latest)](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener)\n- [1.38.2](/java/docs/reference/google-oauth-client/1.38.2/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener)\n- [1.37.0](/java/docs/reference/google-oauth-client/1.37.0/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener)\n- [1.36.0](/java/docs/reference/google-oauth-client/1.36.0/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener)\n- [1.34.1](/java/docs/reference/google-oauth-client/1.34.1/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener)\n- [1.33.3](/java/docs/reference/google-oauth-client/1.33.3/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener)\n- [1.32.1](/java/docs/reference/google-oauth-client/1.32.1/com.google.api.client.auth.oauth2.DataStoreCredentialRefreshListener) \n\n public final class DataStoreCredentialRefreshListener implements CredentialRefreshListener\n\nBeta \n\nThread-safe OAuth 2.0 credential refresh listener that stores the refresh token response in the\ncredential data store.\n\nIt needs to be added as a refresh listener using [Credential.Builder#addRefreshListener](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential.Builder#com_google_api_client_auth_oauth2_Credential_Builder_addRefreshListener_). Sample usage: \n\n\n static void addDataStoreCredentialRefreshListener(\n Credential.Builder credentialBuilder, String userId, DataStoreFactory dataStoreFactory)\n throws IOException {\n credentialBuilder.addRefreshListener(\n new DataStoreCredentialRefreshListener(userId, dataStoreFactory));\n }\n \nInheritance\n-----------\n\n[java.lang.Object](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html) \\\u003e DataStoreCredentialRefreshListener \n\nImplements\n----------\n\n[CredentialRefreshListener](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.CredentialRefreshListener) \n\nInherited Members\n-----------------\n\n[Object.clone()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#clone--) \n[Object.equals(Object)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#equals-java.lang.Object-) \n[Object.finalize()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#finalize--) \n[Object.getClass()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#getClass--) \n[Object.hashCode()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#hashCode--) \n[Object.notify()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notify--) \n[Object.notifyAll()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#notifyAll--) \n[Object.toString()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#toString--) \n[Object.wait()](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait--) \n[Object.wait(long)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-) \n[Object.wait(long,int)](https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html#wait-long-int-)\n\nConstructors\n------------\n\n### DataStoreCredentialRefreshListener(String userId, DataStore\\\u003cStoredCredential\\\u003e credentialDataStore)\n\n public DataStoreCredentialRefreshListener(String userId, DataStore\u003cStoredCredential\u003e credentialDataStore)\n\n### DataStoreCredentialRefreshListener(String userId, DataStoreFactory dataStoreFactory)\n\n public DataStoreCredentialRefreshListener(String userId, DataStoreFactory dataStoreFactory)\n\nConstructor using [StoredCredential#getDefaultDataStore(DataStoreFactory)](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.StoredCredential#com_google_api_client_auth_oauth2_StoredCredential_getDefaultDataStore_com_google_api_client_util_store_DataStoreFactory_) for the stored\ncredential data store.\n\nMethods\n-------\n\n### getCredentialDataStore()\n\n public DataStore\u003cStoredCredential\u003e getCredentialDataStore()\n\nReturns the stored credential data store.\n\n### makePersistent(Credential credential)\n\n public void makePersistent(Credential credential)\n\nStores the updated credential in the credential store.\n\n### onTokenErrorResponse(Credential credential, TokenErrorResponse tokenErrorResponse)\n\n public void onTokenErrorResponse(Credential credential, TokenErrorResponse tokenErrorResponse)\n\nNotifies of an error token response from [Credential#refreshToken()](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_refreshToken__).\n\nTypical use is to provide functionality like removing persistence of the access token from\nthe data store. Implementations can assume proper thread synchronization is already taken care\nof inside [Credential#refreshToken()](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_refreshToken__). Implementations can also assume that [Credential#setAccessToken](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_setAccessToken_), and [Credential#setExpiresInSeconds](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_setExpiresInSeconds_) have already been called\npreviously with `null` to clear their values.\n\n### onTokenResponse(Credential credential, TokenResponse tokenResponse)\n\n public void onTokenResponse(Credential credential, TokenResponse tokenResponse)\n\nNotifies of a successful token response from [Credential#refreshToken()](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_refreshToken__).\n\nTypical use is to provide functionality like persisting the access token in a data store.\nImplementations can assume proper thread synchronization is already taken care of inside [Credential#refreshToken()](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_refreshToken__). Implementations can also assume that [Credential#setAccessToken](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_setAccessToken_), [Credential#setRefreshToken](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_setRefreshToken_), and [Credential#setExpiresInSeconds](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.Credential#com_google_api_client_auth_oauth2_Credential_setExpiresInSeconds_) have already been called previously with the information from\nthe [TokenResponse](/java/docs/reference/google-oauth-client/latest/com.google.api.client.auth.oauth2.TokenResponse)."]]