Esempio Java: invii per app, componenti aggiuntivi e pacchetti in anteprima
Questo articolo fornisce esempi di codice Java che illustrano come usare l'API di invio di Microsoft Store per queste attività:
- Ottenere un token di accesso di Azure AD
- Creare un componente aggiuntivo
- Creare un pacchetto in anteprima
- Creare un invio di app
- Creare un invio di componente aggiuntivo
- Creare un invio di pacchetto in anteprima
È possibile esaminare ogni esempio per ulteriori informazioni sull'attività illustrata oppure compilare tutti gli esempi di codice in questo articolo in un'applicazione console. Per il listato di codice completo, vedere la sezione listato del codice alla fine di questo articolo.
Prerequisiti
Questi esempi usano le librerie seguenti:
- Apache Commons Logging 1.2 (commons-logging-1.2.jar).
- Apache HttpComponents Core 4.4.5 e Apache HttpComponents Client 4.5.2 (httpcore-4.4.5.jar e httpclient-4.5.2.jar).
- JSR 353 JSON Processing API 1.0 e JSR 353 JSON Processing Default Provider API 1.0.4 (javax.json-api-1.0.jar e javax.json-1.0.4.jar).
Programma principale e importazioni
L'esempio seguente illustra le istruzioni imports usate da tutti gli esempi di codice e implementa un programma da riga di comando che chiama gli altri metodi di esempio.
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.StringEntity;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
public class IngestionServiceJavaSamples {
public static void main(String[] args) throws InterruptedException, URISyntaxException, IOException {
// Generate access token. Access token is valid for 1 hour. Regenerate access token when needed
String tenantId = ""; //{Your tenant ID}
String clientId = ""; //{Your client ID}
String clientSecret = ""; //{Your client secret}
String accessToken = GenerateAccessToken(tenantId, clientId, clientSecret);
// Application submission sample
String applicationId = ""; //{Your application ID}
String appSubmissionRequestJson = ""; //{Your submission request JSON}
String appSubmissionZipFilePath = ""; //{Your zip file path}
SubmitNewApplicationSubmission(accessToken, applicationId, appSubmissionRequestJson,
appSubmissionZipFilePath);
// Flight samples
String flightId = ""; //{Your flight ID}
String flightRequestJson = ""; //{Your flight request JSON}
String flightSubmissionRequestJson = ""; //{Your submission request JSON}
String flightSubmissionZipFilePath = ""; //{Your zip file path}
CreateNewFlight(accessToken, applicationId, flightRequestJson);
SubmitNewFlightSubmission(accessToken, applicationId, flightId, flightSubmissionRequestJson,
flightSubmissionZipFilePath);
// In-app-product samples
String inAppProductId = ""; //{Your in-app-product ID}
String inAppProductRequestJson = ""; //{Your in-app-product request JSON}
String iapSubmissionRequestJson = ""; //{Your submission request JSON}
String iapSubmissionZipFilePath = ""; //{Your zip file path}
CreateNewInAppProduct(accessToken, inAppProductRequestJson);
SubmitNewInAppProductSubmission(accessToken, inAppProductId, iapSubmissionRequestJson,
iapSubmissionZipFilePath);
}
}
Ottenere un token di accesso di Azure AD
L'esempio seguente illustra come ottenere un token di accesso di Azure AD che è possibile usare per chiamare i metodi nell'API di invio a Microsoft Store. Dopo aver ottenuto un token, hai 60 minuti per usare questo token nelle chiamate all'API di invio a Microsoft Store prima della scadenza del token. Dopo la scadenza del token, è possibile generarne uno nuovo.
public static String GenerateAccessToken(String tenantId, String clientId, String clientSecret) {
// Generate access token. Access token is valid for 1 hour. Regenerate access token when needed
String tokenEndpoint = "https://login.microsoftonline.com/{0}/oauth2/token";
String tokenResource = "https://manage.devcenter.microsoft.com";
HttpPost tokenRequest = new HttpPost(MessageFormat.format(tokenEndpoint, tenantId));
String tokenRequestBody = MessageFormat.format(
"grant_type=client_credentials&client_id={0}&client_secret={1}&resource={2}",
clientId, clientSecret, tokenResource);
tokenRequest.setEntity(new StringEntity(tokenRequestBody, "utf-8"));
tokenRequest.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
String tokenResponse = httpclient.execute(tokenRequest, responseHandler);
JsonReader reader = Json.createReader(new ByteArrayInputStream(tokenResponse.getBytes("UTF-8")));
String accessToken = reader.readObject().getString("access_token");
return accessToken;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
Creare un componente aggiuntivo
Nell'esempio seguente viene illustrato come creare e quindi eliminare un componente aggiuntivo.
public static void CreateNewInAppProduct(String accessToken, String inAppProductRequestJson)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Create a new in-app-product
HttpPost createInAppProductRequest = new HttpPost(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts");
createInAppProductRequest.addHeader("Authorization", "Bearer " + accessToken);
createInAppProductRequest.addHeader("Content-type", "application/json");
createInAppProductRequest.addHeader("User-Agent", "Java");
createInAppProductRequest.setEntity(new StringEntity(inAppProductRequestJson));
JsonObject createInAppProductResponse = httpclient.execute(createInAppProductRequest,
responseHandler);
String inAppProductId = createInAppProductResponse.getString("id");
System.out.println(createInAppProductResponse.toString());
// Delete created in-app-product
HttpDelete deleteInAppProductRequest = new HttpDelete(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/" + inAppProductId);
deleteInAppProductRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteInAppProductRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteInAppProductRequest, responseHandler);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
Creare un pacchetto in anteprima.
Nell'esempio seguente viene illustrato come creare e quindi eliminare pacchetto in anteprima.
public static void CreateNewFlight(String accessToken, String applicationId, String flightRequestJson)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Create a new flight, a flight submission will be created together with the flight
HttpPost createFlightRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights", applicationId));
createFlightRequest.addHeader("Authorization", "Bearer " + accessToken);
createFlightRequest.addHeader("Content-type", "application/json");
createFlightRequest.setEntity(new StringEntity(flightRequestJson));
JsonObject createFlightResponse = httpclient.execute(createFlightRequest, responseHandler);
System.out.println(createFlightResponse.toString());
String flightId = createFlightResponse.getString("flightId");
String submissionId = createFlightResponse.getJsonObject("pendingFlightSubmission").getString("id");
// Delete created flight
HttpDelete deleteFlightRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}",
applicationId, flightId));
deleteFlightRequest.addHeader("Authorization", "Bearer " + accessToken);
httpclient.execute(deleteFlightRequest, responseHandler);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
Creare un invio di app
L'esempio seguente illustra come usare diversi metodi nell'API di invio a Microsoft Store per creare un invio di app. A tale scopo, il metodo SubmitNewApplicationSubmission
crea un nuovo invio come clone dell'ultimo invio pubblicato, quindi aggiorna ed esegue il commit dell'invio clonato al Centro per i partner. In particolare, il metodo SubmitNewApplicationSubmission
esegue le attività seguenti:
- Per iniziare, il metodo ottiene i dati per l'app specificata.
- Successivamente, elimina l'invio in sospeso per l'app, se presente.
- Viene quindi crea un nuovo invio per l'app (il nuovo invio è una copia dell'ultimo invio pubblicato).
- Modifica alcuni dettagli per il nuovo invio e carica un nuovo pacchetto per l'invio ad Archiviazione BLOB di Azure.
- Successivamente, aggiorna ed esegue il commit del nuovo invio al Centro per i partner.
- Infine, periodicamente controlla lo stato del nuovo invio finché l'invio non viene eseguito correttamente.
public static void SubmitNewApplicationSubmission(String accessToken, String applicationId,
String appSubmissionRequestJson, String zipFilePath)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Get application
HttpGet getApplicationRequest = new HttpGet(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/" + applicationId);
getApplicationRequest.addHeader("Authorization", "Bearer " + accessToken);
getApplicationRequest.addHeader("User-Agent", "Java");
JsonObject getApplicaiontResponse = httpclient.execute(getApplicationRequest, responseHandler);
// Delete existing in-progress submission
JsonObject submissionToRemove = getApplicaiontResponse.getJsonObject(
"pendingApplicationSubmission");
if(submissionToRemove != null){
String submissionToRemoveId = submissionToRemove.getString("id");
HttpDelete deleteSubmissionRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}",
applicationId, submissionToRemoveId));
deleteSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteSubmissionRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteSubmissionRequest, responseHandler);
}
// Create submission
HttpPost createSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions",
applicationId));
createSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
createSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject createSubmissionResponse = httpclient.execute(createSubmissionRequest, responseHandler);
String submissionId = createSubmissionResponse.getString("id");
String fileUploadUrl = createSubmissionResponse.getString("fileUploadUrl");
// Update submission
HttpPut updateSubmissionRequest = new HttpPut(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}",
applicationId, submissionId));
updateSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
updateSubmissionRequest.addHeader("Content-type", "application/json");
updateSubmissionRequest.addHeader("User-Agent", "Java");
updateSubmissionRequest.setEntity(new StringEntity(appSubmissionRequestJson));
JsonObject updateSubmissionResponse = httpclient.execute(updateSubmissionRequest, responseHandler);
// Upload images and packages in a zip file
UploadZipFile(fileUploadUrl, zipFilePath);
// Commit submission
HttpPost commitSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}/commit",
applicationId, submissionId));
commitSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
commitSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject commitSubmissionResponse = httpclient.execute(commitSubmissionRequest, responseHandler);
System.out.println(commitSubmissionResponse.getString("status"));
// Pull submission status until commit process is completed
HttpGet getSubmissionStatusRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}",
applicationId, submissionId));
getSubmissionStatusRequest.addHeader("Authorization", "Bearer " + accessToken);
getSubmissionStatusRequest.addHeader("User-Agent", "Java");
JsonObject getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest,
responseHandler);
String submissionStatus = getSubmissionStatusResponse.getString("status");
while(submissionStatus.equals("CommitStarted")){
Thread.sleep(60*1000);
getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest, responseHandler);
submissionStatus = getSubmissionStatusResponse.getString("status");
}
System.out.println(submissionStatus);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
Creare un invio di componente aggiuntivo
L'esempio seguente illustra come usare diversi metodi nell'API di invio a Microsoft Store per creare un invio di componente aggiuntivo. A tale scopo, il metodo SubmitNewInAppProductSubmission
crea un nuovo invio come clone dell'ultimo invio pubblicato, quindi aggiorna ed esegue il commit dell'invio clonato al Centro per i partner. In particolare, il metodo SubmitNewInAppProductSubmission
esegue le attività seguenti:
- Per iniziare, il metodo ottiene i dati per il componente aggiuntivo specificato.
- Successivamente, elimina l'invio in sospeso per componente aggiuntivo, se presente.
- Viene quindi crea un nuovo invio peril componente aggiuntivo (il nuovo invio è una copia dell'ultimo invio pubblicato).
- Carica un archivio ZIP contenente icone per l'invio ad Archiviazione BLOB di Azure.
- Successivamente, aggiorna ed esegue il commit del nuovo invio al Centro per i partner.
- Infine, periodicamente controlla lo stato del nuovo invio finché l'invio non viene eseguito correttamente.
public static void SubmitNewInAppProductSubmission(String accessToken, String inAppProductId,
String iapSubmissionRequestJson, String zipFilePath)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Get the in-app-product
HttpGet getInAppProductRequest = new HttpGet(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/" + inAppProductId);
getInAppProductRequest.addHeader("Authorization", "Bearer " + accessToken);
getInAppProductRequest.addHeader("User-Agent", "Java");
JsonObject getInAppProductResponse = httpclient.execute(getInAppProductRequest, responseHandler);
// Delete existing in-progress submission
JsonObject submissionToRemove = getInAppProductResponse.getJsonObject(
"pendingInAppProductSubmission");
if(submissionToRemove != null){
String submissionToRemoveId = submissionToRemove.getString("id");
HttpDelete deleteSubmissionRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}",
inAppProductId, submissionToRemoveId));
deleteSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteSubmissionRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteSubmissionRequest, responseHandler);
}
// Create submission
HttpPost createSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions",
inAppProductId));
createSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
createSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject createSubmissionResponse = httpclient.execute(createSubmissionRequest, responseHandler);
String submissionId = createSubmissionResponse.getString("id");
String fileUploadUrl = createSubmissionResponse.getString("fileUploadUrl");
// Update submission
HttpPut updateSubmissionRequest = new HttpPut(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}",
inAppProductId, submissionId));
updateSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
updateSubmissionRequest.addHeader("Content-type", "application/json");
updateSubmissionRequest.setEntity(new StringEntity(iapSubmissionRequestJson));
JsonObject updateSubmissionResponse = httpclient.execute(updateSubmissionRequest, responseHandler);
// Upload images and packages in a zip file
UploadZipFile(fileUploadUrl, zipFilePath);
// Commit submission
HttpPost commitSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}/commit",
inAppProductId, submissionId));
commitSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
commitSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject commitSubmissionResponse = httpclient.execute(commitSubmissionRequest, responseHandler);
System.out.println(commitSubmissionResponse.getString("status"));
// Pull submission status until commit process is completed
HttpGet getSubmissionStatusRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}/status",
inAppProductId, submissionId));
getSubmissionStatusRequest.addHeader("Authorization", "Bearer " + accessToken);
getSubmissionStatusRequest.addHeader("User-Agent", "Java");
JsonObject getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest,
responseHandler);
String submissionStatus = getSubmissionStatusResponse.getString("status");
while(submissionStatus.equals("CommitStarted")){
Thread.sleep(60*1000);
getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest, responseHandler);
submissionStatus = getSubmissionStatusResponse.getString("status");
}
System.out.println(submissionStatus);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
Creare un invio di pacchetto in anteprima
L'esempio seguente illustra come usare diversi metodi nell'API di invio a Microsoft Store per creare un invio di pacchetto in anteprima. A tale scopo, il metodo SubmitNewFlightSubmission
crea un nuovo invio come clone dell'ultimo invio pubblicato, quindi aggiorna ed esegue il commit dell'invio clonato al Centro per i partner. In particolare, il metodo SubmitNewFlightSubmission
esegue le attività seguenti:
- Per iniziare, il metodo ottiene i dati per il pacchetto in anteprima specificato.
- Successivamente, elimina l'invio in sospeso per il pacchetto in anteprima, se presente.
- Viene quindi crea un nuovo invio per il pacchetto in anteprima (il nuovo invio è una copia dell'ultimo invio pubblicato).
- Carica un nuovo pacchetto per l'invio ad Archiviazione BLOB di Azure.
- Successivamente, aggiorna ed esegue il commit del nuovo invio al Centro per i partner.
- Infine, periodicamente controlla lo stato del nuovo invio finché l'invio non viene eseguito correttamente.
public static void SubmitNewFlightSubmission(String accessToken, String applicationId,
String flightId, String flightSubmissionRequestJson, String zipFilePath)
throws InterruptedException, URISyntaxException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Get flight
HttpGet getFlightRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}", applicationId,
flightId));
getFlightRequest.addHeader("Authorization", "Bearer " + accessToken);
getFlightRequest.addHeader("User-Agent", "Java");
JsonObject getFlightResponse = httpclient.execute(getFlightRequest, responseHandler);
// Delete existing in-progress submission
JsonObject submissionToRemove = getFlightResponse.getJsonObject("pendingFlightSubmission");
if(submissionToRemove != null){
String submissionToRemoveId = submissionToRemove.getString("id");
HttpDelete deleteSubmissionRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}",
applicationId, flightId, submissionToRemoveId));
deleteSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteSubmissionRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteSubmissionRequest, responseHandler);
}
// Create submission
HttpPost createSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions",
applicationId, flightId));
createSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
createSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject createSubmissionResponse = httpclient.execute(createSubmissionRequest, responseHandler);
String submissionId = createSubmissionResponse.getString("id");
String fileUploadUrl = createSubmissionResponse.getString("fileUploadUrl");
// Update submission
HttpPut updateSubmissionRequest = new HttpPut(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}",
applicationId, flightId, submissionId));
updateSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
updateSubmissionRequest.addHeader("Content-type", "application/json");
updateSubmissionRequest.addHeader("User-Agent", "Java");
updateSubmissionRequest.setEntity(new StringEntity(flightSubmissionRequestJson));
JsonObject updateSubmissionResponse = httpclient.execute(updateSubmissionRequest, responseHandler);
// Upload images and packages in a zip file
UploadZipFile(fileUploadUrl, zipFilePath);
// Commit submission
HttpPost commitSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/commit",
applicationId, flightId, submissionId));
commitSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
commitSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject commitSubmissionResponse = httpclient.execute(commitSubmissionRequest, responseHandler);
System.out.println(commitSubmissionResponse.getString("status"));
// Pull submission status until commit process is completed
HttpGet getSubmissionStatusRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}",
applicationId, flightId, submissionId));
getSubmissionStatusRequest.addHeader("Authorization", "Bearer " + accessToken);
getSubmissionStatusRequest.addHeader("User-Agent", "Java");
JsonObject getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest,
responseHandler);
String submissionStatus = getSubmissionStatusResponse.getString("status");
while(submissionStatus.equals("CommitStarted")){
Thread.sleep(60*1000);
getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest, responseHandler);
submissionStatus = getSubmissionStatusResponse.getString("status");
}
System.out.println(submissionStatus);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
Metodi di utilità per caricare i file di invio e gestire le risposte alle richieste
I metodi di utilità seguenti illustrano queste attività:
- Come caricare un archivio ZIP contenente nuove risorse per un invio di un'app o di un componente aggiuntivo in Archiviazione BLOB di Azure. Per ulteriori informazioni sul caricamento dei un archivio ZIP in Archiviazione BLOB di Azure per invii di app o componenti aggiuntivi, vedere le istruzioni relative in Creare un invio di un'app, Creare un invio di un componente aggiuntivo e Creare un invio di un pacchetto in anteprima.
- Come gestire le risposte alle richieste.
private static void UploadZipFile(String fileUploadUrl, String zipFilePath) throws IOException{
CloseableHttpClient httpclient = HttpClients.createDefault();
File uploadFile = new File(zipFilePath);
// Encode '+', otherwise it will be decoded as ' '
HttpPut uploadFileRequest = new HttpPut(fileUploadUrl.replace("+", "%2B"));
uploadFileRequest.addHeader("x-ms-blob-type", "BlockBlob");
uploadFileRequest.setEntity(new FileEntity(uploadFile));
CloseableHttpResponse uploadFileResponse;
try {
uploadFileResponse = httpclient.execute(uploadFileRequest);
System.out.println(uploadFileResponse.getStatusLine());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
private static ResponseHandler<JsonObject> CreateJsonResponseHandler(){
ResponseHandler<JsonObject> responseHandler = new ResponseHandler<JsonObject>() {
@Override
public JsonObject handleResponse(HttpResponse response) throws IOException {
StatusLine statusLine = response.getStatusLine();
HttpEntity entity = response.getEntity();
JsonObject returnValue = null;
if(entity != null){
JsonReader reader = Json.createReader(entity.getContent());
returnValue = reader.readObject();
}
// Log response status and correlation ID
System.out.println(statusLine);
System.out.println(response.getFirstHeader("MS-CorrelationId"));
// Underlying failure reason is in response entity
if (statusLine.getStatusCode() >= 300) {
if(entity == null){
throw new HttpResponseException(
statusLine.getStatusCode(),
statusLine.getReasonPhrase());
}
else{
throw new HttpResponseException(
statusLine.getStatusCode(),
statusLine.getReasonPhrase() + " " + returnValue.toString() );
}
}
return returnValue;
}
};
return responseHandler;
}
Elenco codice completo
Il seguente listato del codice contiene tutti gli esempi precedenti organizzati in un solo file di origine.
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.text.MessageFormat;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.StatusLine;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpResponseException;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.entity.FileEntity;
import org.apache.http.entity.StringEntity;
import javax.json.Json;
import javax.json.JsonObject;
import javax.json.JsonReader;
public class IngestionServiceJavaSamples {
public static void main(String[] args) throws InterruptedException, URISyntaxException, IOException {
// Generate access token. Access token is valid for 1 hour. Regenerate access token when needed
String tenantId = ""; //{Your tenant ID}
String clientId = ""; //{Your client ID}
String clientSecret = ""; //{Your client secret}
String accessToken = GenerateAccessToken(tenantId, clientId, clientSecret);
// Application submission sample
String applicationId = ""; //{Your application ID}
String appSubmissionRequestJson = ""; //{Your submission request JSON}
String appSubmissionZipFilePath = ""; //{Your zip file path}
SubmitNewApplicationSubmission(accessToken, applicationId, appSubmissionRequestJson,
appSubmissionZipFilePath);
// Flight samples
String flightId = ""; //{Your flight ID}
String flightRequestJson = ""; //{Your flight request JSON}
String flightSubmissionRequestJson = ""; //{Your submission request JSON}
String flightSubmissionZipFilePath = ""; //{Your zip file path}
CreateNewFlight(accessToken, applicationId, flightRequestJson);
SubmitNewFlightSubmission(accessToken, applicationId, flightId, flightSubmissionRequestJson,
flightSubmissionZipFilePath);
// In-app-product samples
String inAppProductId = ""; //{Your in-app-product ID}
String inAppProductRequestJson = ""; //{Your in-app-product request JSON}
String iapSubmissionRequestJson = ""; //{Your submission request JSON}
String iapSubmissionZipFilePath = ""; //{Your zip file path}
CreateNewInAppProduct(accessToken, inAppProductRequestJson);
SubmitNewInAppProductSubmission(accessToken, inAppProductId, iapSubmissionRequestJson,
iapSubmissionZipFilePath);
}
public static String GenerateAccessToken(String tenantId, String clientId, String clientSecret) {
// Generate access token. Access token is valid for 1 hour. Regenerate access token when needed
String tokenEndpoint = "https://login.microsoftonline.com/{0}/oauth2/token";
String tokenResource = "https://manage.devcenter.microsoft.com";
HttpPost tokenRequest = new HttpPost(MessageFormat.format(tokenEndpoint, tenantId));
String tokenRequestBody = MessageFormat.format(
"grant_type=client_credentials&client_id={0}&client_secret={1}&resource={2}",
clientId, clientSecret, tokenResource);
tokenRequest.setEntity(new StringEntity(tokenRequestBody, "utf-8"));
tokenRequest.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<String> responseHandler = new BasicResponseHandler();
try {
String tokenResponse = httpclient.execute(tokenRequest, responseHandler);
JsonReader reader = Json.createReader(new ByteArrayInputStream(tokenResponse.getBytes("UTF-8")));
String accessToken = reader.readObject().getString("access_token");
return accessToken;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public static void SubmitNewApplicationSubmission(String accessToken, String applicationId,
String appSubmissionRequestJson, String zipFilePath)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Get application
HttpGet getApplicationRequest = new HttpGet(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/" + applicationId);
getApplicationRequest.addHeader("Authorization", "Bearer " + accessToken);
getApplicationRequest.addHeader("User-Agent", "Java");
JsonObject getApplicaiontResponse = httpclient.execute(getApplicationRequest, responseHandler);
// Delete existing in-progress submission
JsonObject submissionToRemove = getApplicaiontResponse.getJsonObject(
"pendingApplicationSubmission");
if(submissionToRemove != null){
String submissionToRemoveId = submissionToRemove.getString("id");
HttpDelete deleteSubmissionRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}",
applicationId, submissionToRemoveId));
deleteSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteSubmissionRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteSubmissionRequest, responseHandler);
}
// Create submission
HttpPost createSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions",
applicationId));
createSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
createSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject createSubmissionResponse = httpclient.execute(createSubmissionRequest, responseHandler);
String submissionId = createSubmissionResponse.getString("id");
String fileUploadUrl = createSubmissionResponse.getString("fileUploadUrl");
// Update submission
HttpPut updateSubmissionRequest = new HttpPut(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}",
applicationId, submissionId));
updateSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
updateSubmissionRequest.addHeader("Content-type", "application/json");
updateSubmissionRequest.addHeader("User-Agent", "Java");
updateSubmissionRequest.setEntity(new StringEntity(appSubmissionRequestJson));
JsonObject updateSubmissionResponse = httpclient.execute(updateSubmissionRequest, responseHandler);
// Upload images and packages in a zip file
UploadZipFile(fileUploadUrl, zipFilePath);
// Commit submission
HttpPost commitSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}/commit",
applicationId, submissionId));
commitSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
commitSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject commitSubmissionResponse = httpclient.execute(commitSubmissionRequest, responseHandler);
System.out.println(commitSubmissionResponse.getString("status"));
// Pull submission status until commit process is completed
HttpGet getSubmissionStatusRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/submissions/{1}",
applicationId, submissionId));
getSubmissionStatusRequest.addHeader("Authorization", "Bearer " + accessToken);
getSubmissionStatusRequest.addHeader("User-Agent", "Java");
JsonObject getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest,
responseHandler);
String submissionStatus = getSubmissionStatusResponse.getString("status");
while(submissionStatus.equals("CommitStarted")){
Thread.sleep(60*1000);
getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest, responseHandler);
submissionStatus = getSubmissionStatusResponse.getString("status");
}
System.out.println(submissionStatus);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
public static void CreateNewFlight(String accessToken, String applicationId, String flightRequestJson)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Create a new flight, a flight submission will be created together with the flight
HttpPost createFlightRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights", applicationId));
createFlightRequest.addHeader("Authorization", "Bearer " + accessToken);
createFlightRequest.addHeader("Content-type", "application/json");
createFlightRequest.setEntity(new StringEntity(flightRequestJson));
JsonObject createFlightResponse = httpclient.execute(createFlightRequest, responseHandler);
System.out.println(createFlightResponse.toString());
String flightId = createFlightResponse.getString("flightId");
String submissionId = createFlightResponse.getJsonObject("pendingFlightSubmission").getString("id");
// Delete created flight
HttpDelete deleteFlightRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}",
applicationId, flightId));
deleteFlightRequest.addHeader("Authorization", "Bearer " + accessToken);
httpclient.execute(deleteFlightRequest, responseHandler);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
public static void SubmitNewFlightSubmission(String accessToken, String applicationId,
String flightId, String flightSubmissionRequestJson, String zipFilePath)
throws InterruptedException, URISyntaxException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Get flight
HttpGet getFlightRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}", applicationId,
flightId));
getFlightRequest.addHeader("Authorization", "Bearer " + accessToken);
getFlightRequest.addHeader("User-Agent", "Java");
JsonObject getFlightResponse = httpclient.execute(getFlightRequest, responseHandler);
// Delete existing in-progress submission
JsonObject submissionToRemove = getFlightResponse.getJsonObject("pendingFlightSubmission");
if(submissionToRemove != null){
String submissionToRemoveId = submissionToRemove.getString("id");
HttpDelete deleteSubmissionRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}",
applicationId, flightId, submissionToRemoveId));
deleteSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteSubmissionRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteSubmissionRequest, responseHandler);
}
// Create submission
HttpPost createSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions",
applicationId, flightId));
createSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
createSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject createSubmissionResponse = httpclient.execute(createSubmissionRequest, responseHandler);
String submissionId = createSubmissionResponse.getString("id");
String fileUploadUrl = createSubmissionResponse.getString("fileUploadUrl");
// Update submission
HttpPut updateSubmissionRequest = new HttpPut(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}",
applicationId, flightId, submissionId));
updateSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
updateSubmissionRequest.addHeader("Content-type", "application/json");
updateSubmissionRequest.addHeader("User-Agent", "Java");
updateSubmissionRequest.setEntity(new StringEntity(flightSubmissionRequestJson));
JsonObject updateSubmissionResponse = httpclient.execute(updateSubmissionRequest, responseHandler);
// Upload images and packages in a zip file
UploadZipFile(fileUploadUrl, zipFilePath);
// Commit submission
HttpPost commitSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}/commit",
applicationId, flightId, submissionId));
commitSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
commitSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject commitSubmissionResponse = httpclient.execute(commitSubmissionRequest, responseHandler);
System.out.println(commitSubmissionResponse.getString("status"));
// Pull submission status until commit process is completed
HttpGet getSubmissionStatusRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/applications/{0}/flights/{1}/submissions/{2}",
applicationId, flightId, submissionId));
getSubmissionStatusRequest.addHeader("Authorization", "Bearer " + accessToken);
getSubmissionStatusRequest.addHeader("User-Agent", "Java");
JsonObject getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest,
responseHandler);
String submissionStatus = getSubmissionStatusResponse.getString("status");
while(submissionStatus.equals("CommitStarted")){
Thread.sleep(60*1000);
getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest, responseHandler);
submissionStatus = getSubmissionStatusResponse.getString("status");
}
System.out.println(submissionStatus);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
public static void CreateNewInAppProduct(String accessToken, String inAppProductRequestJson)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Create a new in-app-product
HttpPost createInAppProductRequest = new HttpPost(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts");
createInAppProductRequest.addHeader("Authorization", "Bearer " + accessToken);
createInAppProductRequest.addHeader("Content-type", "application/json");
createInAppProductRequest.addHeader("User-Agent", "Java");
createInAppProductRequest.setEntity(new StringEntity(inAppProductRequestJson));
JsonObject createInAppProductResponse = httpclient.execute(createInAppProductRequest,
responseHandler);
String inAppProductId = createInAppProductResponse.getString("id");
System.out.println(createInAppProductResponse.toString());
// Delete created in-app-product
HttpDelete deleteInAppProductRequest = new HttpDelete(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/" + inAppProductId);
deleteInAppProductRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteInAppProductRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteInAppProductRequest, responseHandler);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
public static void SubmitNewInAppProductSubmission(String accessToken, String inAppProductId,
String iapSubmissionRequestJson, String zipFilePath)
throws InterruptedException, IOException {
CloseableHttpClient httpclient = HttpClients.createDefault();
ResponseHandler<JsonObject> responseHandler = CreateJsonResponseHandler();
try {
// Get the in-app-product
HttpGet getInAppProductRequest = new HttpGet(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/" + inAppProductId);
getInAppProductRequest.addHeader("Authorization", "Bearer " + accessToken);
getInAppProductRequest.addHeader("User-Agent", "Java");
JsonObject getInAppProductResponse = httpclient.execute(getInAppProductRequest, responseHandler);
// Delete existing in-progress submission
JsonObject submissionToRemove = getInAppProductResponse.getJsonObject(
"pendingInAppProductSubmission");
if(submissionToRemove != null){
String submissionToRemoveId = submissionToRemove.getString("id");
HttpDelete deleteSubmissionRequest = new HttpDelete(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}",
inAppProductId, submissionToRemoveId));
deleteSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
deleteSubmissionRequest.addHeader("User-Agent", "Java");
httpclient.execute(deleteSubmissionRequest, responseHandler);
}
// Create submission
HttpPost createSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions",
inAppProductId));
createSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
createSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject createSubmissionResponse = httpclient.execute(createSubmissionRequest, responseHandler);
String submissionId = createSubmissionResponse.getString("id");
String fileUploadUrl = createSubmissionResponse.getString("fileUploadUrl");
// Update submission
HttpPut updateSubmissionRequest = new HttpPut(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}",
inAppProductId, submissionId));
updateSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
updateSubmissionRequest.addHeader("Content-type", "application/json");
updateSubmissionRequest.setEntity(new StringEntity(iapSubmissionRequestJson));
JsonObject updateSubmissionResponse = httpclient.execute(updateSubmissionRequest, responseHandler);
// Upload images and packages in a zip file
UploadZipFile(fileUploadUrl, zipFilePath);
// Commit submission
HttpPost commitSubmissionRequest = new HttpPost(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}/commit",
inAppProductId, submissionId));
commitSubmissionRequest.addHeader("Authorization", "Bearer " + accessToken);
commitSubmissionRequest.addHeader("User-Agent", "Java");
JsonObject commitSubmissionResponse = httpclient.execute(commitSubmissionRequest, responseHandler);
System.out.println(commitSubmissionResponse.getString("status"));
// Pull submission status until commit process is completed
HttpGet getSubmissionStatusRequest = new HttpGet(MessageFormat.format(
"https://manage.devcenter.microsoft.com/v1.0/my/inappproducts/{0}/submissions/{1}/status",
inAppProductId, submissionId));
getSubmissionStatusRequest.addHeader("Authorization", "Bearer " + accessToken);
getSubmissionStatusRequest.addHeader("User-Agent", "Java");
JsonObject getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest,
responseHandler);
String submissionStatus = getSubmissionStatusResponse.getString("status");
while(submissionStatus.equals("CommitStarted")){
Thread.sleep(60*1000);
getSubmissionStatusResponse = httpclient.execute(getSubmissionStatusRequest, responseHandler);
submissionStatus = getSubmissionStatusResponse.getString("status");
}
System.out.println(submissionStatus);
} catch (HttpResponseException e){
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
private static void UploadZipFile(String fileUploadUrl, String zipFilePath) throws IOException{
CloseableHttpClient httpclient = HttpClients.createDefault();
File uploadFile = new File(zipFilePath);
// Encode '+', otherwise it will be decoded as ' '
HttpPut uploadFileRequest = new HttpPut(fileUploadUrl.replace("+", "%2B"));
uploadFileRequest.addHeader("x-ms-blob-type", "BlockBlob");
uploadFileRequest.setEntity(new FileEntity(uploadFile));
CloseableHttpResponse uploadFileResponse;
try {
uploadFileResponse = httpclient.execute(uploadFileRequest);
System.out.println(uploadFileResponse.getStatusLine());
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
httpclient.close();
}
}
private static ResponseHandler<JsonObject> CreateJsonResponseHandler(){
ResponseHandler<JsonObject> responseHandler = new ResponseHandler<JsonObject>() {
@Override
public JsonObject handleResponse(HttpResponse response) throws IOException {
StatusLine statusLine = response.getStatusLine();
HttpEntity entity = response.getEntity();
JsonObject returnValue = null;
if(entity != null){
JsonReader reader = Json.createReader(entity.getContent());
returnValue = reader.readObject();
}
// Log response status and correlation ID
System.out.println(statusLine);
System.out.println(response.getFirstHeader("MS-CorrelationId"));
// Underlying failure reason is in response entity
if (statusLine.getStatusCode() >= 300) {
if(entity == null){
throw new HttpResponseException(
statusLine.getStatusCode(),
statusLine.getReasonPhrase());
}
else{
throw new HttpResponseException(
statusLine.getStatusCode(),
statusLine.getReasonPhrase() + " " + returnValue.toString() );
}
}
return returnValue;
}
};
return responseHandler;
}
}