title: How to get Access Token using client_credentials using java code?
body: <p>I have some API which requires access token to get the response. In <code>postman</code> we use <code>OAuth 2.0</code> to get the access token by providing client username and password. In a similar way, I want to fetch the new access token.</p>
  
  <p><strong>Here is the sample code which I have tried so far.</strong></p>
  
  <pre><code>import java.io.*;
  import java.net.URL;
  import java.net.URLEncoder;
  import java.util.Map;
  import java.lang.reflect.Type;
  import javax.net.ssl.HttpsURLConnection;
  
  // Google Gson Libraries used for Json Parsing
  import com.google.gson.Gson;
  import com.google.gson.reflect.TypeToken;
  
  public class AuthGoogle {
  
      /**
       * @param args
       * @throws IOException 
       */
      public static void main(String[] args) throws IOException {
          // TODO Auto-generated method stub
           String grantType = "client_credentials";
              String applicationID = "application";
              String username = "username";
              String password = "password";
              String url = "url_link";
              HttpsURLConnection httpConn = null;
              BufferedReader in = null;
  
              try {
  
                  // Create the data to send
                  StringBuilder data = new StringBuilder();
                  data.append("grant_type=" + URLEncoder.encode(grantType, "UTF-8"));
                  data.append("&amp;amp;client_id=" + URLEncoder.encode(applicationID, "UTF-8"));
                  data.append("&amp;amp;username=" + URLEncoder.encode(username, "UTF-8"));
                  data.append("&amp;amp;password=" + URLEncoder.encode(password, "UTF-8"));
  
                  // Create a byte array of the data to be sent
                  byte[] byteArray = data.toString().getBytes("UTF-8");
  
                  // Setup the Request
                  URL request = new URL(null, url,  new sun.net.www.protocol.https.Handler());
                  httpConn = (HttpsURLConnection)request.openConnection();
                  httpConn.setRequestMethod("POST");
                  httpConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                  httpConn.setRequestProperty("Content-Length", "" + byteArray.length);
                  httpConn.setDoOutput(true);
  
                  // Write data
                  OutputStream postStream = httpConn.getOutputStream();
                  postStream.write(byteArray, 0, byteArray.length);
                  postStream.close();
  
                  // Send Request &amp;amp; Get Response
                  InputStreamReader reader = new InputStreamReader(httpConn.getInputStream());
                  in = new BufferedReader(reader);
  
                  // Get the Json reponse containing the Access Token
                  String json = in.readLine();
                  System.out.println("Json String = " + json);
  
                  // Parse the Json response and retrieve the Access Token
                  Gson gson = new Gson();
                  Type mapType  = new TypeToken&lt;Map&lt;String,String&gt;&gt;(){}.getType();
                  Map&lt;String,String&gt; ser = gson.fromJson(json, mapType);
                  String accessToken = ser.get("access_token");
                  System.out.println("Access Token = " + accessToken);
  
              } catch (java.io.IOException e) {
  
                  // This exception will be raised if the server didn't return 200 - OK
                  // Retrieve more information about the error
                  System.out.println(e.getMessage());
  
              } finally {
  
                  // Be sure to close out any resources or connections
                  if (in != null) in.close();
                  if (httpConn != null) httpConn.disconnect();
              }
          }
  
  }
  </code></pre>
  
  <p>I am getting output as <code>Connection refused: connect.</code></p>
  
  <p><strong>Another code I have tried is:-</strong></p>
  
  <pre><code>import org.apache.oltu.oauth2.client.OAuthClient;
  import org.apache.oltu.oauth2.client.URLConnectionClient;
  import org.apache.oltu.oauth2.client.request.OAuthClientRequest;
  import org.apache.oltu.oauth2.client.response.OAuthJSONAccessTokenResponse;
  import org.apache.oltu.oauth2.common.OAuth;
  import org.apache.oltu.oauth2.common.message.types.GrantType;
  
  import java.io.BufferedReader;
  import java.io.InputStream;
  import java.io.InputStreamReader;
  import java.net.HttpURLConnection;
  import java.net.URL;
  import org.apache.commons.codec.binary.Base64;
  
  public class OltuJavaClient {
  
      public static final String TOKEN_REQUEST_URL = "url_link";
      public static final String CLIENT_ID = "client_id";
      public static final String CLIENT_SECRET = "client_pass";
  
      public static void main(String[] args) {
          try {
              OAuthClient client = new OAuthClient(new URLConnectionClient());
  
              OAuthClientRequest request =
                      OAuthClientRequest.tokenLocation(TOKEN_REQUEST_URL)
                      .setGrantType(GrantType.CLIENT_CREDENTIALS)
                      .setClientId(CLIENT_ID)
                      .setClientSecret(CLIENT_SECRET)
                      // .setScope() here if you want to set the token scope
                      .buildQueryMessage();
              request.addHeader("Accept", "application/json");
              request.addHeader("Content-Type", "application/json");
              request.addHeader("Authorization", base64EncodedBasicAuthentication());
  
              String token = client.accessToken(request, OAuth.HttpMethod.POST, OAuthJSONAccessTokenResponse.class).getAccessToken();
              System.out.println(token.toString());
  
          } catch (Exception exn) {
              exn.printStackTrace();
          }
      }
  
      private static String base64EncodedBasicAuthentication() {
          // TODO Auto-generated method stub
          return null;
      }
  }
  </code></pre>
  
  <p><strong>Here I am getting this error:-</strong> <code>OAuthProblemException{error='unsupported_response_type', description='Invalid response! Response body is not application/json encoded', uri='null', state='null', scope='null', redirectUri='null', responseStatus=0, parameters={}}</code></p>
  
  <p>Can we do this way? Any leads would be appreciated.</p>