in Java/Embed for your customers/AppOwnsData/src/main/java/com/embedsample/appownsdata/services/PowerBIService.java [409:478]
public static EmbedToken getEmbedToken(String accessToken, List<String> reportIds, List<String> datasetIds, String... targetWorkspaceIds) throws JsonMappingException, JsonProcessingException {
// Note: This method is an example and is not consumed in this sample app
// Embed Token - Generate Token REST API
final String uri = "https://api.powerbi.com/v1.0/myorg/GenerateToken";
RestTemplate restTemplate = new RestTemplate();
// Create request header
HttpHeaders headers = new HttpHeaders();
headers.put("Content-Type", Arrays.asList("application/json"));
headers.put("Authorization", Arrays.asList("Bearer " + accessToken));
// Add dataset id in body
JSONArray jsonDatasets = new JSONArray();
for (String datasetId : datasetIds) {
jsonDatasets.put(new JSONObject().put("id", datasetId));
}
// Add report id in body
JSONArray jsonReports = new JSONArray();
for (String reportId : reportIds) {
jsonReports.put(new JSONObject().put("id", reportId));
}
// Request body
JSONObject requestBody = new JSONObject();
requestBody.put("datasets", jsonDatasets);
requestBody.put("reports", jsonReports);
// Add target workspace id in body
JSONArray jsonWorkspaces = new JSONArray();
for (String targetWorkspaceId: targetWorkspaceIds) {
jsonWorkspaces.put(new JSONObject().put("id", targetWorkspaceId));
}
requestBody.put("targetWorkspaces", jsonWorkspaces);
// Add (body, header) to HTTP entity
HttpEntity<String> httpEntity = new HttpEntity<> (requestBody.toString(), headers);
// Call the API
ResponseEntity<String> response = restTemplate.postForEntity(uri, httpEntity, String.class);
HttpHeaders responseHeader = response.getHeaders();
String responseBody = response.getBody();
// Create Object Mapper to convert String into Object
ObjectMapper mapper = new ObjectMapper();
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
// Convert responseBody string into EmbedToken class object
EmbedToken embedToken = mapper.readValue(responseBody, EmbedToken.class);
if (Config.DEBUG) {
// Get the request Id
List<String> reqIdList = responseHeader.get("RequestId");
// Log progress
logger.info("Retrieved Embed token\nEmbed Token Id: {}", embedToken.tokenId);
// Log Request Id
if (reqIdList != null && !reqIdList.isEmpty()) {
for (String reqId: reqIdList) {
logger.info("Request Id: {}", reqId);
}
}
}
return embedToken;
}