private OAuth2AccessTokenRespDTO getAccessToken(CarbonOAuthTokenRequest oauthRequest) {

    OAuth2AccessTokenReqDTO tokenReqDTO = new OAuth2AccessTokenReqDTO();
    String grantType = oauthRequest.getGrantType();
    tokenReqDTO.setGrantType(grantType);
    tokenReqDTO.setClientId(oauthRequest.getClientId());
    tokenReqDTO.setClientSecret(oauthRequest.getClientSecret());
    tokenReqDTO.setCallbackURI(oauthRequest.getRedirectURI());
    tokenReqDTO.setScope(
        oauthRequest.getScopes().toArray(new String[oauthRequest.getScopes().size()]));
    tokenReqDTO.setTenantDomain(oauthRequest.getTenantDomain());

    // Check the grant type and set the corresponding parameters
    if (GrantType.AUTHORIZATION_CODE.toString().equals(grantType)) {
      tokenReqDTO.setAuthorizationCode(oauthRequest.getCode());
    } else if (GrantType.PASSWORD.toString().equals(grantType)) {
      tokenReqDTO.setResourceOwnerUsername(oauthRequest.getUsername());
      tokenReqDTO.setResourceOwnerPassword(oauthRequest.getPassword());
    } else if (GrantType.REFRESH_TOKEN.toString().equals(grantType)) {
      tokenReqDTO.setRefreshToken(oauthRequest.getRefreshToken());
    } else if (org.wso2.carbon.identity.oauth.common.GrantType.SAML20_BEARER
        .toString()
        .equals(grantType)) {
      tokenReqDTO.setAssertion(oauthRequest.getAssertion());
    } else if (org.wso2.carbon.identity.oauth.common.GrantType.IWA_NTLM
        .toString()
        .equals(grantType)) {
      tokenReqDTO.setWindowsToken(oauthRequest.getWindowsToken());
    } else {
      // Set all request parameters to the OAuth2AccessTokenReqDTO
      tokenReqDTO.setRequestParameters(oauthRequest.getRequestParameters());
    }

    return EndpointUtil.getOAuth2Service().issueAccessToken(tokenReqDTO);
  }