Sample Java Code (OAuth)
The following examples demonstrate how to access the P6 REST API using Java. The first example sends an HTTP GET request to the /location endpoint to retrieve information about a location with a given ObjectId. The second example sends an HTTP POST request to the /location endpoint to create a location.
Sample Program to Invoke GET REST API
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.httpclient.HttpStatus;
public class SampleOAUTHGET {
private static String userName = "<username>";
private static String password = "<password>";
private static String hostName = "<hostname>";
private static String portNumber = "<portnumber>";
private static String objectId = "<objectId>";
private static String tokenGenerationUrl = "http://" + hostName + ":" + portNumber + "/p6ws/oauth/token";
private static String loadActivitiesURL = "http://" + hostName + ":" + portNumber + "/p6ws/restapi/location?Fields=City,Country,CountryCode,CreateDate,CreateUser,LastUpdateDate,LastUpdateUser,Latitude,Longitude,Municipality,Name,ObjectId,PostalCode,State,StateCode&Filter=ObjectId :eq: " + objectId;
public static void main(String s[]) throws Exception {
String responseJson = callRestURL(tokenGenerationUrl, "POST");
System.out.println("Response:- " + responseJson);
}
private static String callRestURL(String restUrl, String method) throws Exception {
HttpURLConnection conn = null;
try {
trustAllCert();
String authTokenResponse = getAuthTokenDetails();
URL loadUrl = new URL(loadActivitiesURL);
conn = (HttpURLConnection) loadUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
System.out.println("Token Generated : " + authTokenResponse);
conn.setRequestProperty("Authorization", authTokenResponse);
if (conn.getResponseCode() != HttpStatus.SC_OK) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode() + "Error: "
+ readStreamData(conn.getErrorStream()));
}
return readStreamData(conn.getInputStream());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return "";
}
@SuppressWarnings("unchecked")
private static String getAuthTokenDetails() {
HttpURLConnection conn = null;
try {
// Generating the OAuth Token
URL tokenUrl = new URL(tokenGenerationUrl);
conn = (HttpURLConnection) tokenUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
String userCredentials = userName + ":" + password;
String base64Credentials = javax.xml.bind.DatatypeConverter.printBase64Binary(userCredentials.getBytes());
String basicAuth = base64Credentials;
conn.setRequestProperty("authToken", basicAuth);
conn.setRequestProperty("token_exp", "3600");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode() + "Error: " + readStreamData(conn.getErrorStream()));
}
return readStreamData(conn.getInputStream());
} catch (Exception e) {
conn.disconnect();
throw new RuntimeException("Failed to generate OAuth Token");
}
}
private static String readStreamData(InputStream is) throws IOException {
try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
String output;
StringBuilder buff = new StringBuilder();
while ((output = br.readLine()) != null) {
buff.append(output);
}
return buff.toString();
}
}
private static void trustAllCert() throws NoSuchAlgorithmException, KeyManagementException {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
} };
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
}
}
Sample Program to Invoke POST REST API
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.httpclient.HttpStatus;
public class SampleOAUTHPOST {
private static String userName = "<username>";
private static String password = "<password>";
private static String hostName = "<hostname>";
private static String portNumber = "<portnumber>";
private static String tokenGenerationUrl = "http://" + hostName + ":" + portNumber + "/p6ws/oauth/token";
private static String postLocationsURL = "http://" + hostName + ":" + portNumber + "/p6ws/restapi/location";
public static void main(String s[]) throws Exception {
String responseJson = callRestURL(tokenGenerationUrl, "POST");
System.out.println("Response:- " + responseJson);
}
private static String callRestURL(String restUrl, String method) throws Exception {
HttpURLConnection conn = null;
try {
trustAllCert();
String authTokenResponse = getAuthTokenDetails();
URL loadUrl = new URL(postLocationsURL);
conn = (HttpURLConnection) loadUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
System.out.println("Token Generated : " + authTokenResponse);
conn.setRequestProperty("Authorization", authTokenResponse);
String input = "[{\"addressLine1\":\"MyAddress1\", \"AddressLine2\":\"MyAddress2\", \"City\":\"Chicago\", \"Country\":\"United States\",\"CountryCode\":\"1\", \"Municipality\":\"IL\", \"Name\":\"Chicago-2\", \"PostalCode\":\"60007\",\"State\":\"IL\",\"StateCode\":\"36\", \"Latitude\":5555555555, \"Longitude\":91}]";
OutputStream os = conn.getOutputStream();
os.write(input.getBytes("UTF-8"));
os.flush();
if (conn.getResponseCode() != HttpStatus.SC_CREATED) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode() + "Error: "
+ readStreamData(conn.getErrorStream()));
}
return readStreamData(conn.getInputStream());
} catch (Exception e) {
e.printStackTrace();
} finally {
if (conn != null) {
conn.disconnect();
}
}
return "";
}
@SuppressWarnings("unchecked")
private static String getAuthTokenDetails() {
HttpURLConnection conn = null;
try {
// Generating the OAuth Token
URL tokenUrl = new URL(tokenGenerationUrl);
conn = (HttpURLConnection) tokenUrl.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Content-Type", "application/json");
String userCredentials = userName + ":" + password;
String base64Credentials = javax.xml.bind.DatatypeConverter.printBase64Binary(userCredentials.getBytes());
String basicAuth = base64Credentials;
conn.setRequestProperty("authToken", basicAuth);
conn.setRequestProperty("token_exp", "3600");
if (conn.getResponseCode() != 200) {
throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode() + "Error: " + readStreamData(conn.getErrorStream()));
}
return readStreamData(conn.getInputStream());
} catch (Exception e) {
conn.disconnect();
throw new RuntimeException("Failed to generate OAuth Token");
}
}
private static String readStreamData(InputStream is) throws IOException {
try (BufferedReader br = new BufferedReader(new InputStreamReader(is))) {
String output;
StringBuilder buff = new StringBuilder();
while ((output = br.readLine()) != null) {
buff.append(output);
}
return buff.toString();
}
}
private static void trustAllCert() throws NoSuchAlgorithmException, KeyManagementException {
// Create a trust manager that does not validate certificate chains
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
@Override
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[] certs, String authType) {
}
@Override
public void checkServerTrusted(X509Certificate[] certs, String authType) {
}
} };
// Install the all-trusting trust manager
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
}
}