com.microsoft.windowsazure.management.compute.HostedServiceOperationsImpl.java Source code

Java tutorial

Introduction

Here is the source code for com.microsoft.windowsazure.management.compute.HostedServiceOperationsImpl.java

Source

/**
 * 
 * Copyright (c) Microsoft and contributors.  All rights reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *   http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * 
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 */

// Warning: This code was generated by a tool.
// 
// Changes to this file may cause incorrect behavior and will be lost if the
// code is regenerated.

package com.microsoft.windowsazure.management.compute;

import com.microsoft.windowsazure.core.LazyCollection;
import com.microsoft.windowsazure.core.OperationResponse;
import com.microsoft.windowsazure.core.OperationStatus;
import com.microsoft.windowsazure.core.OperationStatusResponse;
import com.microsoft.windowsazure.core.ServiceOperations;
import com.microsoft.windowsazure.core.pipeline.apache.CustomHttpDelete;
import com.microsoft.windowsazure.core.utils.BOMInputStream;
import com.microsoft.windowsazure.core.utils.Base64;
import com.microsoft.windowsazure.core.utils.CollectionStringBuilder;
import com.microsoft.windowsazure.core.utils.XmlUtility;
import com.microsoft.windowsazure.exception.CloudError;
import com.microsoft.windowsazure.exception.ServiceException;
import com.microsoft.windowsazure.management.compute.models.AccessControlListRule;
import com.microsoft.windowsazure.management.compute.models.AdditionalUnattendContentSettings;
import com.microsoft.windowsazure.management.compute.models.ComponentSetting;
import com.microsoft.windowsazure.management.compute.models.ComputeCapabilities;
import com.microsoft.windowsazure.management.compute.models.ConfigurationSet;
import com.microsoft.windowsazure.management.compute.models.DataDiskConfiguration;
import com.microsoft.windowsazure.management.compute.models.DataVirtualHardDisk;
import com.microsoft.windowsazure.management.compute.models.DeploymentSlot;
import com.microsoft.windowsazure.management.compute.models.DeploymentStatus;
import com.microsoft.windowsazure.management.compute.models.DeploymentUpgradeType;
import com.microsoft.windowsazure.management.compute.models.DnsServer;
import com.microsoft.windowsazure.management.compute.models.DnsSettings;
import com.microsoft.windowsazure.management.compute.models.DomainJoinCredentials;
import com.microsoft.windowsazure.management.compute.models.DomainJoinProvisioning;
import com.microsoft.windowsazure.management.compute.models.DomainJoinSettings;
import com.microsoft.windowsazure.management.compute.models.EndpointAcl;
import com.microsoft.windowsazure.management.compute.models.ExtensionCertificateConfiguration;
import com.microsoft.windowsazure.management.compute.models.ExtensionEndpointConfiguration;
import com.microsoft.windowsazure.management.compute.models.ExtensionImage;
import com.microsoft.windowsazure.management.compute.models.ExtensionLocalResourceConfiguration;
import com.microsoft.windowsazure.management.compute.models.GuestAgentFormattedMessage;
import com.microsoft.windowsazure.management.compute.models.GuestAgentMessage;
import com.microsoft.windowsazure.management.compute.models.GuestAgentStatus;
import com.microsoft.windowsazure.management.compute.models.HostedServiceAddExtensionParameters;
import com.microsoft.windowsazure.management.compute.models.HostedServiceCheckNameAvailabilityResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceCreateParameters;
import com.microsoft.windowsazure.management.compute.models.HostedServiceGetDetailedResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceGetExtensionResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceGetResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceListAvailableExtensionsResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceListExtensionsResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceListResponse;
import com.microsoft.windowsazure.management.compute.models.HostedServiceProperties;
import com.microsoft.windowsazure.management.compute.models.HostedServiceStatus;
import com.microsoft.windowsazure.management.compute.models.HostedServiceUpdateParameters;
import com.microsoft.windowsazure.management.compute.models.IPConfiguration;
import com.microsoft.windowsazure.management.compute.models.IPConfigurationInstance;
import com.microsoft.windowsazure.management.compute.models.InputEndpoint;
import com.microsoft.windowsazure.management.compute.models.InstanceEndpoint;
import com.microsoft.windowsazure.management.compute.models.LoadBalancerProbe;
import com.microsoft.windowsazure.management.compute.models.LoadBalancerProbeTransportProtocol;
import com.microsoft.windowsazure.management.compute.models.NetworkInterface;
import com.microsoft.windowsazure.management.compute.models.NetworkInterfaceInstance;
import com.microsoft.windowsazure.management.compute.models.OSDiskConfiguration;
import com.microsoft.windowsazure.management.compute.models.OSVirtualHardDisk;
import com.microsoft.windowsazure.management.compute.models.PersistentVMDowntime;
import com.microsoft.windowsazure.management.compute.models.ResourceExtensionConfigurationStatus;
import com.microsoft.windowsazure.management.compute.models.ResourceExtensionParameterValue;
import com.microsoft.windowsazure.management.compute.models.ResourceExtensionReference;
import com.microsoft.windowsazure.management.compute.models.ResourceExtensionStatus;
import com.microsoft.windowsazure.management.compute.models.ResourceExtensionSubStatus;
import com.microsoft.windowsazure.management.compute.models.Role;
import com.microsoft.windowsazure.management.compute.models.RoleInstance;
import com.microsoft.windowsazure.management.compute.models.RoleInstancePowerState;
import com.microsoft.windowsazure.management.compute.models.SshSettingKeyPair;
import com.microsoft.windowsazure.management.compute.models.SshSettingPublicKey;
import com.microsoft.windowsazure.management.compute.models.SshSettings;
import com.microsoft.windowsazure.management.compute.models.StoredCertificateSettings;
import com.microsoft.windowsazure.management.compute.models.UnattendComponent;
import com.microsoft.windowsazure.management.compute.models.UnattendPassSettings;
import com.microsoft.windowsazure.management.compute.models.UpgradeDomainState;
import com.microsoft.windowsazure.management.compute.models.UpgradeStatus;
import com.microsoft.windowsazure.management.compute.models.VMImageInput;
import com.microsoft.windowsazure.management.compute.models.VirtualIPAddress;
import com.microsoft.windowsazure.management.compute.models.VirtualMachineWindowsRemoteManagementListenerType;
import com.microsoft.windowsazure.management.compute.models.WindowsRemoteManagementListener;
import com.microsoft.windowsazure.management.compute.models.WindowsRemoteManagementSettings;
import com.microsoft.windowsazure.tracing.ClientRequestTrackingHandler;
import com.microsoft.windowsazure.tracing.CloudTracing;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.StringEntity;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.xml.sax.SAXException;

import javax.xml.bind.DatatypeConverter;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.net.InetAddress;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

/**
* The Service Management API includes operations for managing the hosted
* services beneath your subscription.  (see
* http://msdn.microsoft.com/en-us/library/windowsazure/ee460812.aspx for more
* information)
*/
public class HostedServiceOperationsImpl
        implements ServiceOperations<ComputeManagementClientImpl>, HostedServiceOperations {
    /**
    * Initializes a new instance of the HostedServiceOperationsImpl class.
    *
    * @param client Reference to the service client.
    */
    HostedServiceOperationsImpl(ComputeManagementClientImpl client) {
        this.client = client;
    }

    private ComputeManagementClientImpl client;

    /**
    * Gets a reference to the
    * microsoft.windowsazure.management.compute.ComputeManagementClientImpl.
    * @return The Client value.
    */
    public ComputeManagementClientImpl getClient() {
        return this.client;
    }

    /**
    * The Add Extension operation adds an available extension to your cloud
    * service. In Azure, a process can run as an extension of a cloud service.
    * For example, Remote Desktop Access or the Azure Diagnostics Agent can
    * run as extensions to the cloud service. You can find the available
    * extension by using the List Available Extensions operation.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169558.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param parameters Required. Parameters supplied to the Add Extension
    * operation.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public Future<OperationStatusResponse> addExtensionAsync(final String serviceName,
            final HostedServiceAddExtensionParameters parameters) {
        return this.getClient().getExecutorService().submit(new Callable<OperationStatusResponse>() {
            @Override
            public OperationStatusResponse call() throws Exception {
                return addExtension(serviceName, parameters);
            }
        });
    }

    /**
    * The Add Extension operation adds an available extension to your cloud
    * service. In Azure, a process can run as an extension of a cloud service.
    * For example, Remote Desktop Access or the Azure Diagnostics Agent can
    * run as extensions to the cloud service. You can find the available
    * extension by using the List Available Extensions operation.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169558.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param parameters Required. Parameters supplied to the Add Extension
    * operation.
    * @throws InterruptedException Thrown when a thread is waiting, sleeping,
    * or otherwise occupied, and the thread is interrupted, either before or
    * during the activity. Occasionally a method may wish to test whether the
    * current thread has been interrupted, and if so, to immediately throw
    * this exception. The following code can be used to achieve this effect:
    * @throws ExecutionException Thrown when attempting to retrieve the result
    * of a task that aborted by throwing an exception. This exception can be
    * inspected using the Throwable.getCause() method.
    * @throws ServiceException Thrown if the server returned an error for the
    * request.
    * @throws IOException Thrown if there was an error setting up tracing for
    * the request.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public OperationStatusResponse addExtension(String serviceName, HostedServiceAddExtensionParameters parameters)
            throws InterruptedException, ExecutionException, ServiceException, IOException {
        ComputeManagementClient client2 = this.getClient();
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            tracingParameters.put("parameters", parameters);
            CloudTracing.enter(invocationId, this, "addExtensionAsync", tracingParameters);
        }
        try {
            if (shouldTrace) {
                client2 = this.getClient().withRequestFilterLast(new ClientRequestTrackingHandler(invocationId))
                        .withResponseFilterLast(new ClientRequestTrackingHandler(invocationId));
            }

            OperationResponse response = client2.getHostedServicesOperations()
                    .beginAddingExtensionAsync(serviceName, parameters).get();
            OperationStatusResponse result = client2.getOperationStatusAsync(response.getRequestId()).get();
            int delayInSeconds = 30;
            if (client2.getLongRunningOperationInitialTimeout() >= 0) {
                delayInSeconds = client2.getLongRunningOperationInitialTimeout();
            }
            while (result.getStatus() != null && result.getStatus().equals(OperationStatus.InProgress)) {
                Thread.sleep(delayInSeconds * 1000);
                result = client2.getOperationStatusAsync(response.getRequestId()).get();
                delayInSeconds = 30;
                if (client2.getLongRunningOperationRetryTimeout() >= 0) {
                    delayInSeconds = client2.getLongRunningOperationRetryTimeout();
                }
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }

            if (result.getStatus() != OperationStatus.Succeeded) {
                if (result.getError() != null) {
                    ServiceException ex = new ServiceException(
                            result.getError().getCode() + " : " + result.getError().getMessage());
                    ex.setError(new CloudError());
                    ex.getError().setCode(result.getError().getCode());
                    ex.getError().setMessage(result.getError().getMessage());
                    if (shouldTrace) {
                        CloudTracing.error(invocationId, ex);
                    }
                    throw ex;
                } else {
                    ServiceException ex = new ServiceException("");
                    if (shouldTrace) {
                        CloudTracing.error(invocationId, ex);
                    }
                    throw ex;
                }
            }

            return result;
        } finally {
            if (client2 != null && shouldTrace) {
                client2.close();
            }
        }
    }

    /**
    * The Begin Adding Extension operation adds an available extension to your
    * cloud service. In Azure, a process can run as an extension of a cloud
    * service. For example, Remote Desktop Access or the Azure Diagnostics
    * Agent can run as extensions to the cloud service. You can find the
    * available extension by using the List Available Extensions operation.
    * (see http://msdn.microsoft.com/en-us/library/windowsazure/dn169558.aspx
    * for more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param parameters Required. Parameters supplied to the Begin Adding
    * Extension operation.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public Future<OperationResponse> beginAddingExtensionAsync(final String serviceName,
            final HostedServiceAddExtensionParameters parameters) {
        return this.getClient().getExecutorService().submit(new Callable<OperationResponse>() {
            @Override
            public OperationResponse call() throws Exception {
                return beginAddingExtension(serviceName, parameters);
            }
        });
    }

    /**
    * The Begin Adding Extension operation adds an available extension to your
    * cloud service. In Azure, a process can run as an extension of a cloud
    * service. For example, Remote Desktop Access or the Azure Diagnostics
    * Agent can run as extensions to the cloud service. You can find the
    * available extension by using the List Available Extensions operation.
    * (see http://msdn.microsoft.com/en-us/library/windowsazure/dn169558.aspx
    * for more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param parameters Required. Parameters supplied to the Begin Adding
    * Extension operation.
    * @throws ParserConfigurationException Thrown if there was an error
    * configuring the parser for the response body.
    * @throws SAXException Thrown if there was an error parsing the response
    * body.
    * @throws TransformerException Thrown if there was an error creating the
    * DOM transformer.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public OperationResponse beginAddingExtension(String serviceName,
            HostedServiceAddExtensionParameters parameters)
            throws ParserConfigurationException, SAXException, TransformerException, IOException, ServiceException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }
        // TODO: Validate serviceName is a valid DNS name.
        if (parameters == null) {
            throw new NullPointerException("parameters");
        }
        if (parameters.getId() == null) {
            throw new NullPointerException("parameters.Id");
        }
        if (parameters.getType() == null) {
            throw new NullPointerException("parameters.Type");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            tracingParameters.put("parameters", parameters);
            CloudTracing.enter(invocationId, this, "beginAddingExtensionAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        url = url + "/extensions";
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpPost httpRequest = new HttpPost(url);

        // Set Headers
        httpRequest.setHeader("Content-Type", "application/xml");
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Serialize Request
        String requestContent = null;
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document requestDoc = documentBuilder.newDocument();

        Element extensionElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                "Extension");
        requestDoc.appendChild(extensionElement);

        if (parameters.getProviderNamespace() != null) {
            Element providerNameSpaceElement = requestDoc
                    .createElementNS("http://schemas.microsoft.com/windowsazure", "ProviderNameSpace");
            providerNameSpaceElement.appendChild(requestDoc.createTextNode(parameters.getProviderNamespace()));
            extensionElement.appendChild(providerNameSpaceElement);
        }

        Element typeElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure", "Type");
        typeElement.appendChild(requestDoc.createTextNode(parameters.getType()));
        extensionElement.appendChild(typeElement);

        Element idElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure", "Id");
        idElement.appendChild(requestDoc.createTextNode(parameters.getId()));
        extensionElement.appendChild(idElement);

        if (parameters.getThumbprint() != null) {
            Element thumbprintElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "Thumbprint");
            thumbprintElement.appendChild(requestDoc.createTextNode(parameters.getThumbprint()));
            extensionElement.appendChild(thumbprintElement);
        }

        if (parameters.getThumbprintAlgorithm() != null) {
            Element thumbprintAlgorithmElement = requestDoc
                    .createElementNS("http://schemas.microsoft.com/windowsazure", "ThumbprintAlgorithm");
            thumbprintAlgorithmElement.appendChild(requestDoc.createTextNode(parameters.getThumbprintAlgorithm()));
            extensionElement.appendChild(thumbprintAlgorithmElement);
        }

        if (parameters.getPublicConfiguration() != null) {
            Element publicConfigurationElement = requestDoc
                    .createElementNS("http://schemas.microsoft.com/windowsazure", "PublicConfiguration");
            publicConfigurationElement.appendChild(
                    requestDoc.createTextNode(Base64.encode(parameters.getPublicConfiguration().getBytes())));
            extensionElement.appendChild(publicConfigurationElement);
        }

        if (parameters.getPrivateConfiguration() != null) {
            Element privateConfigurationElement = requestDoc
                    .createElementNS("http://schemas.microsoft.com/windowsazure", "PrivateConfiguration");
            privateConfigurationElement.appendChild(
                    requestDoc.createTextNode(Base64.encode(parameters.getPrivateConfiguration().getBytes())));
            extensionElement.appendChild(privateConfigurationElement);
        }

        if (parameters.getVersion() != null) {
            Element versionElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "Version");
            versionElement.appendChild(requestDoc.createTextNode(parameters.getVersion()));
            extensionElement.appendChild(versionElement);
        }

        DOMSource domSource = new DOMSource(requestDoc);
        StringWriter stringWriter = new StringWriter();
        StreamResult streamResult = new StreamResult(stringWriter);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(domSource, streamResult);
        requestContent = stringWriter.toString();
        StringEntity entity = new StringEntity(requestContent);
        httpRequest.setEntity(entity);
        httpRequest.setHeader("Content-Type", "application/xml");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_ACCEPTED) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, requestContent, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            OperationResponse result = null;
            // Deserialize Response
            result = new OperationResponse();
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The DeleteAll Hosted Service operation deletes the specified cloud
    * service as well as operating system disk, attached data disks, and the
    * source blobs for the disks from storage from Microsoft Azure. (see
    * 'http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx' for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public Future<OperationResponse> beginDeletingAllAsync(final String serviceName) {
        return this.getClient().getExecutorService().submit(new Callable<OperationResponse>() {
            @Override
            public OperationResponse call() throws Exception {
                return beginDeletingAll(serviceName);
            }
        });
    }

    /**
    * The DeleteAll Hosted Service operation deletes the specified cloud
    * service as well as operating system disk, attached data disks, and the
    * source blobs for the disks from storage from Microsoft Azure. (see
    * 'http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx' for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public OperationResponse beginDeletingAll(String serviceName) throws IOException, ServiceException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "beginDeletingAllAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        ArrayList<String> queryParameters = new ArrayList<String>();
        queryParameters.add("comp=media");
        if (queryParameters.size() > 0) {
            url = url + "?" + CollectionStringBuilder.join(queryParameters, "&");
        }
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        CustomHttpDelete httpRequest = new CustomHttpDelete(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_ACCEPTED) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            OperationResponse result = null;
            // Deserialize Response
            result = new OperationResponse();
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Begin Deleting Extension operation deletes the specified extension
    * from a cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169560.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param extensionId Required. The identifier that was assigned to the
    * extension when it was added to the cloud service
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public Future<OperationResponse> beginDeletingExtensionAsync(final String serviceName,
            final String extensionId) {
        return this.getClient().getExecutorService().submit(new Callable<OperationResponse>() {
            @Override
            public OperationResponse call() throws Exception {
                return beginDeletingExtension(serviceName, extensionId);
            }
        });
    }

    /**
    * The Begin Deleting Extension operation deletes the specified extension
    * from a cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169560.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param extensionId Required. The identifier that was assigned to the
    * extension when it was added to the cloud service
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public OperationResponse beginDeletingExtension(String serviceName, String extensionId)
            throws IOException, ServiceException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }
        // TODO: Validate serviceName is a valid DNS name.
        if (extensionId == null) {
            throw new NullPointerException("extensionId");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            tracingParameters.put("extensionId", extensionId);
            CloudTracing.enter(invocationId, this, "beginDeletingExtensionAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        url = url + "/extensions/";
        url = url + URLEncoder.encode(extensionId, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        CustomHttpDelete httpRequest = new CustomHttpDelete(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK && statusCode != HttpStatus.SC_ACCEPTED) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            OperationResponse result = null;
            // Deserialize Response
            result = new OperationResponse();
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Check Hosted Service Name Availability operation checks for the
    * availability of the specified cloud service name.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/jj154116.aspx for
    * more information)
    *
    * @param serviceName Required. The cloud service name that you would like
    * to use.
    * @return The Check Hosted Service Name Availability operation response.
    */
    @Override
    public Future<HostedServiceCheckNameAvailabilityResponse> checkNameAvailabilityAsync(final String serviceName) {
        return this.getClient().getExecutorService()
                .submit(new Callable<HostedServiceCheckNameAvailabilityResponse>() {
                    @Override
                    public HostedServiceCheckNameAvailabilityResponse call() throws Exception {
                        return checkNameAvailability(serviceName);
                    }
                });
    }

    /**
    * The Check Hosted Service Name Availability operation checks for the
    * availability of the specified cloud service name.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/jj154116.aspx for
    * more information)
    *
    * @param serviceName Required. The cloud service name that you would like
    * to use.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @return The Check Hosted Service Name Availability operation response.
    */
    @Override
    public HostedServiceCheckNameAvailabilityResponse checkNameAvailability(String serviceName)
            throws IOException, ServiceException, ParserConfigurationException, SAXException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }
        // TODO: Validate serviceName is a valid DNS name.

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "checkNameAvailabilityAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/operations/isavailable/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceCheckNameAvailabilityResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceCheckNameAvailabilityResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element availabilityResponseElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "AvailabilityResponse");
                if (availabilityResponseElement != null) {
                    Element resultElement = XmlUtility.getElementByTagNameNS(availabilityResponseElement,
                            "http://schemas.microsoft.com/windowsazure", "Result");
                    if (resultElement != null) {
                        boolean resultInstance;
                        resultInstance = DatatypeConverter
                                .parseBoolean(resultElement.getTextContent().toLowerCase());
                        result.setIsAvailable(resultInstance);
                    }

                    Element reasonElement = XmlUtility.getElementByTagNameNS(availabilityResponseElement,
                            "http://schemas.microsoft.com/windowsazure", "Reason");
                    if (reasonElement != null) {
                        String reasonInstance;
                        reasonInstance = reasonElement.getTextContent();
                        result.setReason(reasonInstance);
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Create Hosted Service operation creates a new cloud service in Azure.
    * (see http://msdn.microsoft.com/en-us/library/windowsazure/gg441304.aspx
    * for more information)
    *
    * @param parameters Required. Parameters supplied to the Create Hosted
    * Service operation.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public Future<OperationResponse> createAsync(final HostedServiceCreateParameters parameters) {
        return this.getClient().getExecutorService().submit(new Callable<OperationResponse>() {
            @Override
            public OperationResponse call() throws Exception {
                return create(parameters);
            }
        });
    }

    /**
    * The Create Hosted Service operation creates a new cloud service in Azure.
    * (see http://msdn.microsoft.com/en-us/library/windowsazure/gg441304.aspx
    * for more information)
    *
    * @param parameters Required. Parameters supplied to the Create Hosted
    * Service operation.
    * @throws InterruptedException Thrown when a thread is waiting, sleeping,
    * or otherwise occupied, and the thread is interrupted, either before or
    * during the activity. Occasionally a method may wish to test whether the
    * current thread has been interrupted, and if so, to immediately throw
    * this exception. The following code can be used to achieve this effect:
    * @throws ExecutionException Thrown when attempting to retrieve the result
    * of a task that aborted by throwing an exception. This exception can be
    * inspected using the Throwable.getCause() method.
    * @throws ServiceException Thrown if the server returned an error for the
    * request.
    * @throws IOException Thrown if there was an error setting up tracing for
    * the request.
    * @throws ParserConfigurationException Thrown if there was an error
    * configuring the parser for the response body.
    * @throws SAXException Thrown if there was an error parsing the response
    * body.
    * @throws TransformerException Thrown if there was an error creating the
    * DOM transformer.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public OperationResponse create(HostedServiceCreateParameters parameters)
            throws InterruptedException, ExecutionException, ServiceException, IOException,
            ParserConfigurationException, SAXException, TransformerException, URISyntaxException {
        // Validate
        if (parameters == null) {
            throw new NullPointerException("parameters");
        }
        if (parameters.getDescription() != null && parameters.getDescription().length() > 1024) {
            throw new IllegalArgumentException("parameters.Description");
        }
        if (parameters.getLabel() == null) {
            throw new NullPointerException("parameters.Label");
        }
        if (parameters.getServiceName() == null) {
            throw new NullPointerException("parameters.ServiceName");
        }
        // TODO: Validate parameters.ServiceName is a valid DNS name.

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("parameters", parameters);
            CloudTracing.enter(invocationId, this, "createAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices";
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpPost httpRequest = new HttpPost(url);

        // Set Headers
        httpRequest.setHeader("Content-Type", "application/xml");
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Serialize Request
        String requestContent = null;
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document requestDoc = documentBuilder.newDocument();

        Element createHostedServiceElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                "CreateHostedService");
        requestDoc.appendChild(createHostedServiceElement);

        Element serviceNameElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                "ServiceName");
        serviceNameElement.appendChild(requestDoc.createTextNode(parameters.getServiceName()));
        createHostedServiceElement.appendChild(serviceNameElement);

        Element labelElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure", "Label");
        labelElement.appendChild(requestDoc.createTextNode(Base64.encode(parameters.getLabel().getBytes())));
        createHostedServiceElement.appendChild(labelElement);

        if (parameters.getDescription() != null) {
            Element descriptionElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "Description");
            descriptionElement.appendChild(requestDoc.createTextNode(parameters.getDescription()));
            createHostedServiceElement.appendChild(descriptionElement);
        }

        if (parameters.getLocation() != null) {
            Element locationElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "Location");
            locationElement.appendChild(requestDoc.createTextNode(parameters.getLocation()));
            createHostedServiceElement.appendChild(locationElement);
        }

        if (parameters.getAffinityGroup() != null) {
            Element affinityGroupElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "AffinityGroup");
            affinityGroupElement.appendChild(requestDoc.createTextNode(parameters.getAffinityGroup()));
            createHostedServiceElement.appendChild(affinityGroupElement);
        }

        if (parameters.getExtendedProperties() != null) {
            if (parameters.getExtendedProperties() instanceof LazyCollection == false
                    || ((LazyCollection) parameters.getExtendedProperties()).isInitialized()) {
                Element extendedPropertiesDictionaryElement = requestDoc
                        .createElementNS("http://schemas.microsoft.com/windowsazure", "ExtendedProperties");
                for (Map.Entry<String, String> entry : parameters.getExtendedProperties().entrySet()) {
                    String extendedPropertiesKey = entry.getKey();
                    String extendedPropertiesValue = entry.getValue();
                    Element extendedPropertiesElement = requestDoc
                            .createElementNS("http://schemas.microsoft.com/windowsazure", "ExtendedProperty");
                    extendedPropertiesDictionaryElement.appendChild(extendedPropertiesElement);

                    Element extendedPropertiesKeyElement = requestDoc
                            .createElementNS("http://schemas.microsoft.com/windowsazure", "Name");
                    extendedPropertiesKeyElement.appendChild(requestDoc.createTextNode(extendedPropertiesKey));
                    extendedPropertiesElement.appendChild(extendedPropertiesKeyElement);

                    Element extendedPropertiesValueElement = requestDoc
                            .createElementNS("http://schemas.microsoft.com/windowsazure", "Value");
                    extendedPropertiesValueElement.appendChild(requestDoc.createTextNode(extendedPropertiesValue));
                    extendedPropertiesElement.appendChild(extendedPropertiesValueElement);
                }
                createHostedServiceElement.appendChild(extendedPropertiesDictionaryElement);
            }
        }

        if (parameters.getReverseDnsFqdn() != null) {
            Element reverseDnsFqdnElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "ReverseDnsFqdn");
            reverseDnsFqdnElement.appendChild(requestDoc.createTextNode(parameters.getReverseDnsFqdn()));
            createHostedServiceElement.appendChild(reverseDnsFqdnElement);
        }

        DOMSource domSource = new DOMSource(requestDoc);
        StringWriter stringWriter = new StringWriter();
        StreamResult streamResult = new StreamResult(stringWriter);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(domSource, streamResult);
        requestContent = stringWriter.toString();
        StringEntity entity = new StringEntity(requestContent);
        httpRequest.setEntity(entity);
        httpRequest.setHeader("Content-Type", "application/xml");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_CREATED) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, requestContent, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            OperationResponse result = null;
            // Deserialize Response
            result = new OperationResponse();
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Delete Hosted Service operation deletes the specified cloud service
    * from Azure.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public Future<OperationResponse> deleteAsync(final String serviceName) {
        return this.getClient().getExecutorService().submit(new Callable<OperationResponse>() {
            @Override
            public OperationResponse call() throws Exception {
                return delete(serviceName);
            }
        });
    }

    /**
    * The Delete Hosted Service operation deletes the specified cloud service
    * from Azure.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws InterruptedException Thrown when a thread is waiting, sleeping,
    * or otherwise occupied, and the thread is interrupted, either before or
    * during the activity. Occasionally a method may wish to test whether the
    * current thread has been interrupted, and if so, to immediately throw
    * this exception. The following code can be used to achieve this effect:
    * @throws ExecutionException Thrown when attempting to retrieve the result
    * of a task that aborted by throwing an exception. This exception can be
    * inspected using the Throwable.getCause() method.
    * @throws ServiceException Thrown if the server returned an error for the
    * request.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public OperationResponse delete(String serviceName)
            throws IOException, ServiceException, InterruptedException, ExecutionException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "deleteAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        CustomHttpDelete httpRequest = new CustomHttpDelete(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            OperationResponse result = null;
            // Deserialize Response
            result = new OperationResponse();
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The DeleteAll Hosted Service operation deletes the specified cloud
    * service as well as operating system disk, attached data disks, and the
    * source blobs for the disks from storage from Microsoft Azure. (see
    * 'http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx' for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public Future<OperationStatusResponse> deleteAllAsync(final String serviceName) {
        return this.getClient().getExecutorService().submit(new Callable<OperationStatusResponse>() {
            @Override
            public OperationStatusResponse call() throws Exception {
                return deleteAll(serviceName);
            }
        });
    }

    /**
    * The DeleteAll Hosted Service operation deletes the specified cloud
    * service as well as operating system disk, attached data disks, and the
    * source blobs for the disks from storage from Microsoft Azure. (see
    * 'http://msdn.microsoft.com/en-us/library/windowsazure/gg441305.aspx' for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @throws InterruptedException Thrown when a thread is waiting, sleeping,
    * or otherwise occupied, and the thread is interrupted, either before or
    * during the activity. Occasionally a method may wish to test whether the
    * current thread has been interrupted, and if so, to immediately throw
    * this exception. The following code can be used to achieve this effect:
    * @throws ExecutionException Thrown when attempting to retrieve the result
    * of a task that aborted by throwing an exception. This exception can be
    * inspected using the Throwable.getCause() method.
    * @throws ServiceException Thrown if the server returned an error for the
    * request.
    * @throws IOException Thrown if there was an error setting up tracing for
    * the request.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public OperationStatusResponse deleteAll(String serviceName)
            throws InterruptedException, ExecutionException, ServiceException, IOException {
        ComputeManagementClient client2 = this.getClient();
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "deleteAllAsync", tracingParameters);
        }
        try {
            if (shouldTrace) {
                client2 = this.getClient().withRequestFilterLast(new ClientRequestTrackingHandler(invocationId))
                        .withResponseFilterLast(new ClientRequestTrackingHandler(invocationId));
            }

            OperationResponse response = client2.getHostedServicesOperations().beginDeletingAllAsync(serviceName)
                    .get();
            OperationStatusResponse result = client2.getOperationStatusAsync(response.getRequestId()).get();
            int delayInSeconds = 30;
            if (client2.getLongRunningOperationInitialTimeout() >= 0) {
                delayInSeconds = client2.getLongRunningOperationInitialTimeout();
            }
            while (result.getStatus() != null && result.getStatus().equals(OperationStatus.InProgress)) {
                Thread.sleep(delayInSeconds * 1000);
                result = client2.getOperationStatusAsync(response.getRequestId()).get();
                delayInSeconds = 30;
                if (client2.getLongRunningOperationRetryTimeout() >= 0) {
                    delayInSeconds = client2.getLongRunningOperationRetryTimeout();
                }
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }

            if (result.getStatus() != OperationStatus.Succeeded) {
                if (result.getError() != null) {
                    ServiceException ex = new ServiceException(
                            result.getError().getCode() + " : " + result.getError().getMessage());
                    ex.setError(new CloudError());
                    ex.getError().setCode(result.getError().getCode());
                    ex.getError().setMessage(result.getError().getMessage());
                    if (shouldTrace) {
                        CloudTracing.error(invocationId, ex);
                    }
                    throw ex;
                } else {
                    ServiceException ex = new ServiceException("");
                    if (shouldTrace) {
                        CloudTracing.error(invocationId, ex);
                    }
                    throw ex;
                }
            }

            return result;
        } finally {
            if (client2 != null && shouldTrace) {
                client2.close();
            }
        }
    }

    /**
    * The Delete Extension operation deletes the specified extension from a
    * cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169560.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param extensionId Required. The identifier that was assigned to the
    * extension when it was added to the cloud service
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public Future<OperationStatusResponse> deleteExtensionAsync(final String serviceName,
            final String extensionId) {
        return this.getClient().getExecutorService().submit(new Callable<OperationStatusResponse>() {
            @Override
            public OperationStatusResponse call() throws Exception {
                return deleteExtension(serviceName, extensionId);
            }
        });
    }

    /**
    * The Delete Extension operation deletes the specified extension from a
    * cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169560.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param extensionId Required. The identifier that was assigned to the
    * extension when it was added to the cloud service
    * @throws InterruptedException Thrown when a thread is waiting, sleeping,
    * or otherwise occupied, and the thread is interrupted, either before or
    * during the activity. Occasionally a method may wish to test whether the
    * current thread has been interrupted, and if so, to immediately throw
    * this exception. The following code can be used to achieve this effect:
    * @throws ExecutionException Thrown when attempting to retrieve the result
    * of a task that aborted by throwing an exception. This exception can be
    * inspected using the Throwable.getCause() method.
    * @throws ServiceException Thrown if the server returned an error for the
    * request.
    * @throws IOException Thrown if there was an error setting up tracing for
    * the request.
    * @return The response body contains the status of the specified
    * asynchronous operation, indicating whether it has succeeded, is
    * inprogress, or has failed. Note that this status is distinct from the
    * HTTP status code returned for the Get Operation Status operation itself.
    * If the asynchronous operation succeeded, the response body includes the
    * HTTP status code for the successful request. If the asynchronous
    * operation failed, the response body includes the HTTP status code for
    * the failed request and error information regarding the failure.
    */
    @Override
    public OperationStatusResponse deleteExtension(String serviceName, String extensionId)
            throws InterruptedException, ExecutionException, ServiceException, IOException {
        ComputeManagementClient client2 = this.getClient();
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            tracingParameters.put("extensionId", extensionId);
            CloudTracing.enter(invocationId, this, "deleteExtensionAsync", tracingParameters);
        }
        try {
            if (shouldTrace) {
                client2 = this.getClient().withRequestFilterLast(new ClientRequestTrackingHandler(invocationId))
                        .withResponseFilterLast(new ClientRequestTrackingHandler(invocationId));
            }

            OperationResponse response = client2.getHostedServicesOperations()
                    .beginDeletingExtensionAsync(serviceName, extensionId).get();
            OperationStatusResponse result = client2.getOperationStatusAsync(response.getRequestId()).get();
            int delayInSeconds = 30;
            if (client2.getLongRunningOperationInitialTimeout() >= 0) {
                delayInSeconds = client2.getLongRunningOperationInitialTimeout();
            }
            while (result.getStatus() != null && result.getStatus().equals(OperationStatus.InProgress)) {
                Thread.sleep(delayInSeconds * 1000);
                result = client2.getOperationStatusAsync(response.getRequestId()).get();
                delayInSeconds = 30;
                if (client2.getLongRunningOperationRetryTimeout() >= 0) {
                    delayInSeconds = client2.getLongRunningOperationRetryTimeout();
                }
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }

            if (result.getStatus() != OperationStatus.Succeeded) {
                if (result.getError() != null) {
                    ServiceException ex = new ServiceException(
                            result.getError().getCode() + " : " + result.getError().getMessage());
                    ex.setError(new CloudError());
                    ex.getError().setCode(result.getError().getCode());
                    ex.getError().setMessage(result.getError().getMessage());
                    if (shouldTrace) {
                        CloudTracing.error(invocationId, ex);
                    }
                    throw ex;
                } else {
                    ServiceException ex = new ServiceException("");
                    if (shouldTrace) {
                        CloudTracing.error(invocationId, ex);
                    }
                    throw ex;
                }
            }

            return result;
        } finally {
            if (client2 != null && shouldTrace) {
                client2.close();
            }
        }
    }

    /**
    * The Get Hosted Service Properties operation retrieves system properties
    * for the specified cloud service. These properties include the service
    * name and service type; and the name of the affinity group to which the
    * service belongs, or its location if it is not part of an affinity group.
    * (see http://msdn.microsoft.com/en-us/library/windowsazure/ee460806.aspx
    * for more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @return The Get Hosted Service operation response.
    */
    @Override
    public Future<HostedServiceGetResponse> getAsync(final String serviceName) {
        return this.getClient().getExecutorService().submit(new Callable<HostedServiceGetResponse>() {
            @Override
            public HostedServiceGetResponse call() throws Exception {
                return get(serviceName);
            }
        });
    }

    /**
    * The Get Hosted Service Properties operation retrieves system properties
    * for the specified cloud service. These properties include the service
    * name and service type; and the name of the affinity group to which the
    * service belongs, or its location if it is not part of an affinity group.
    * (see http://msdn.microsoft.com/en-us/library/windowsazure/ee460806.aspx
    * for more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return The Get Hosted Service operation response.
    */
    @Override
    public HostedServiceGetResponse get(String serviceName)
            throws IOException, ServiceException, ParserConfigurationException, SAXException, URISyntaxException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "getAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceGetResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceGetResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element hostedServiceElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "HostedService");
                if (hostedServiceElement != null) {
                    Element urlElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "Url");
                    if (urlElement != null) {
                        URI urlInstance;
                        urlInstance = new URI(urlElement.getTextContent());
                        result.setUri(urlInstance);
                    }

                    Element serviceNameElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "ServiceName");
                    if (serviceNameElement != null) {
                        String serviceNameInstance;
                        serviceNameInstance = serviceNameElement.getTextContent();
                        result.setServiceName(serviceNameInstance);
                    }

                    Element hostedServicePropertiesElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "HostedServiceProperties");
                    if (hostedServicePropertiesElement != null) {
                        HostedServiceProperties hostedServicePropertiesInstance = new HostedServiceProperties();
                        result.setProperties(hostedServicePropertiesInstance);

                        Element descriptionElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "Description");
                        if (descriptionElement != null) {
                            String descriptionInstance;
                            descriptionInstance = descriptionElement.getTextContent();
                            hostedServicePropertiesInstance.setDescription(descriptionInstance);
                        }

                        Element affinityGroupElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "AffinityGroup");
                        if (affinityGroupElement != null) {
                            String affinityGroupInstance;
                            affinityGroupInstance = affinityGroupElement.getTextContent();
                            hostedServicePropertiesInstance.setAffinityGroup(affinityGroupInstance);
                        }

                        Element locationElement = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                "http://schemas.microsoft.com/windowsazure", "Location");
                        if (locationElement != null) {
                            String locationInstance;
                            locationInstance = locationElement.getTextContent();
                            hostedServicePropertiesInstance.setLocation(locationInstance);
                        }

                        Element labelElement = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                "http://schemas.microsoft.com/windowsazure", "Label");
                        if (labelElement != null) {
                            String labelInstance;
                            labelInstance = labelElement.getTextContent() != null
                                    ? new String(Base64.decode(labelElement.getTextContent()))
                                    : null;
                            hostedServicePropertiesInstance.setLabel(labelInstance);
                        }

                        Element statusElement = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                "http://schemas.microsoft.com/windowsazure", "Status");
                        if (statusElement != null && statusElement.getTextContent() != null
                                && !statusElement.getTextContent().isEmpty()) {
                            HostedServiceStatus statusInstance;
                            statusInstance = HostedServiceStatus.valueOf(statusElement.getTextContent());
                            hostedServicePropertiesInstance.setStatus(statusInstance);
                        }

                        Element dateCreatedElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "DateCreated");
                        if (dateCreatedElement != null) {
                            Calendar dateCreatedInstance;
                            dateCreatedInstance = DatatypeConverter
                                    .parseDateTime(dateCreatedElement.getTextContent());
                            hostedServicePropertiesInstance.setDateCreated(dateCreatedInstance);
                        }

                        Element dateLastModifiedElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "DateLastModified");
                        if (dateLastModifiedElement != null) {
                            Calendar dateLastModifiedInstance;
                            dateLastModifiedInstance = DatatypeConverter
                                    .parseDateTime(dateLastModifiedElement.getTextContent());
                            hostedServicePropertiesInstance.setDateLastModified(dateLastModifiedInstance);
                        }

                        Element extendedPropertiesSequenceElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "ExtendedProperties");
                        if (extendedPropertiesSequenceElement != null) {
                            for (int i1 = 0; i1 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(extendedPropertiesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                    .size(); i1 = i1 + 1) {
                                org.w3c.dom.Element extendedPropertiesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(extendedPropertiesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                        .get(i1));
                                String extendedPropertiesKey = XmlUtility
                                        .getElementByTagNameNS(extendedPropertiesElement,
                                                "http://schemas.microsoft.com/windowsazure", "Name")
                                        .getTextContent();
                                String extendedPropertiesValue = XmlUtility
                                        .getElementByTagNameNS(extendedPropertiesElement,
                                                "http://schemas.microsoft.com/windowsazure", "Value")
                                        .getTextContent();
                                hostedServicePropertiesInstance.getExtendedProperties().put(extendedPropertiesKey,
                                        extendedPropertiesValue);
                            }
                        }

                        Element reverseDnsFqdnElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "ReverseDnsFqdn");
                        if (reverseDnsFqdnElement != null) {
                            String reverseDnsFqdnInstance;
                            reverseDnsFqdnInstance = reverseDnsFqdnElement.getTextContent();
                            hostedServicePropertiesInstance.setReverseDnsFqdn(reverseDnsFqdnInstance);
                        }
                    }

                    Element computeCapabilitiesElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "ComputeCapabilities");
                    if (computeCapabilitiesElement != null) {
                        ComputeCapabilities computeCapabilitiesInstance = new ComputeCapabilities();
                        result.setComputeCapabilities(computeCapabilitiesInstance);

                        Element virtualMachinesRoleSizesSequenceElement = XmlUtility.getElementByTagNameNS(
                                computeCapabilitiesElement, "http://schemas.microsoft.com/windowsazure",
                                "VirtualMachinesRoleSizes");
                        if (virtualMachinesRoleSizesSequenceElement != null) {
                            for (int i2 = 0; i2 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(virtualMachinesRoleSizesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                    .size(); i2 = i2 + 1) {
                                org.w3c.dom.Element virtualMachinesRoleSizesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(virtualMachinesRoleSizesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                        .get(i2));
                                computeCapabilitiesInstance.getVirtualMachinesRoleSizes()
                                        .add(virtualMachinesRoleSizesElement.getTextContent());
                            }
                        }

                        Element webWorkerRoleSizesSequenceElement = XmlUtility.getElementByTagNameNS(
                                computeCapabilitiesElement, "http://schemas.microsoft.com/windowsazure",
                                "WebWorkerRoleSizes");
                        if (webWorkerRoleSizesSequenceElement != null) {
                            for (int i3 = 0; i3 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(webWorkerRoleSizesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                    .size(); i3 = i3 + 1) {
                                org.w3c.dom.Element webWorkerRoleSizesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(webWorkerRoleSizesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                        .get(i3));
                                computeCapabilitiesInstance.getWebWorkerRoleSizes()
                                        .add(webWorkerRoleSizesElement.getTextContent());
                            }
                        }
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Get Detailed Hosted Service Properties operation retrieves system
    * properties for the specified cloud service. These properties include the
    * service name and service type; the name of the affinity group to which
    * the service belongs, or its location if it is not part of an affinity
    * group; and information on the deployments of the service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460806.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @return The detailed Get Hosted Service operation response.
    */
    @Override
    public Future<HostedServiceGetDetailedResponse> getDetailedAsync(final String serviceName) {
        return this.getClient().getExecutorService().submit(new Callable<HostedServiceGetDetailedResponse>() {
            @Override
            public HostedServiceGetDetailedResponse call() throws Exception {
                return getDetailed(serviceName);
            }
        });
    }

    /**
    * The Get Detailed Hosted Service Properties operation retrieves system
    * properties for the specified cloud service. These properties include the
    * service name and service type; the name of the affinity group to which
    * the service belongs, or its location if it is not part of an affinity
    * group; and information on the deployments of the service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460806.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return The detailed Get Hosted Service operation response.
    */
    @Override
    public HostedServiceGetDetailedResponse getDetailed(String serviceName)
            throws IOException, ServiceException, ParserConfigurationException, SAXException, URISyntaxException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "getDetailedAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        ArrayList<String> queryParameters = new ArrayList<String>();
        queryParameters.add("embed-detail=true");
        if (queryParameters.size() > 0) {
            url = url + "?" + CollectionStringBuilder.join(queryParameters, "&");
        }
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceGetDetailedResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceGetDetailedResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element hostedServiceElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "HostedService");
                if (hostedServiceElement != null) {
                    Element deploymentsSequenceElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "Deployments");
                    if (deploymentsSequenceElement != null) {
                        for (int i1 = 0; i1 < com.microsoft.windowsazure.core.utils.XmlUtility
                                .getElementsByTagNameNS(deploymentsSequenceElement,
                                        "http://schemas.microsoft.com/windowsazure", "Deployment")
                                .size(); i1 = i1 + 1) {
                            org.w3c.dom.Element deploymentsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(deploymentsSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "Deployment")
                                    .get(i1));
                            HostedServiceGetDetailedResponse.Deployment deploymentInstance = new HostedServiceGetDetailedResponse.Deployment();
                            result.getDeployments().add(deploymentInstance);

                            Element nameElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Name");
                            if (nameElement != null) {
                                String nameInstance;
                                nameInstance = nameElement.getTextContent();
                                deploymentInstance.setName(nameInstance);
                            }

                            Element deploymentSlotElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "DeploymentSlot");
                            if (deploymentSlotElement != null && deploymentSlotElement.getTextContent() != null
                                    && !deploymentSlotElement.getTextContent().isEmpty()) {
                                DeploymentSlot deploymentSlotInstance;
                                deploymentSlotInstance = DeploymentSlot
                                        .valueOf(deploymentSlotElement.getTextContent());
                                deploymentInstance.setDeploymentSlot(deploymentSlotInstance);
                            }

                            Element privateIDElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "PrivateID");
                            if (privateIDElement != null) {
                                String privateIDInstance;
                                privateIDInstance = privateIDElement.getTextContent();
                                deploymentInstance.setPrivateId(privateIDInstance);
                            }

                            Element statusElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Status");
                            if (statusElement != null && statusElement.getTextContent() != null
                                    && !statusElement.getTextContent().isEmpty()) {
                                DeploymentStatus statusInstance;
                                statusInstance = DeploymentStatus.valueOf(statusElement.getTextContent());
                                deploymentInstance.setStatus(statusInstance);
                            }

                            Element labelElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Label");
                            if (labelElement != null) {
                                String labelInstance;
                                labelInstance = labelElement.getTextContent() != null
                                        ? new String(Base64.decode(labelElement.getTextContent()))
                                        : null;
                                deploymentInstance.setLabel(labelInstance);
                            }

                            Element urlElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Url");
                            if (urlElement != null) {
                                URI urlInstance;
                                urlInstance = new URI(urlElement.getTextContent());
                                deploymentInstance.setUri(urlInstance);
                            }

                            Element configurationElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Configuration");
                            if (configurationElement != null) {
                                String configurationInstance;
                                configurationInstance = configurationElement.getTextContent() != null
                                        ? new String(Base64.decode(configurationElement.getTextContent()))
                                        : null;
                                deploymentInstance.setConfiguration(configurationInstance);
                            }

                            Element roleInstanceListSequenceElement = XmlUtility.getElementByTagNameNS(
                                    deploymentsElement, "http://schemas.microsoft.com/windowsazure",
                                    "RoleInstanceList");
                            if (roleInstanceListSequenceElement != null) {
                                for (int i2 = 0; i2 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(roleInstanceListSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleInstance")
                                        .size(); i2 = i2 + 1) {
                                    org.w3c.dom.Element roleInstanceListElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(roleInstanceListSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "RoleInstance")
                                            .get(i2));
                                    RoleInstance roleInstanceInstance = new RoleInstance();
                                    deploymentInstance.getRoleInstances().add(roleInstanceInstance);

                                    Element roleNameElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "RoleName");
                                    if (roleNameElement != null) {
                                        String roleNameInstance;
                                        roleNameInstance = roleNameElement.getTextContent();
                                        roleInstanceInstance.setRoleName(roleNameInstance);
                                    }

                                    Element instanceNameElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceName");
                                    if (instanceNameElement != null) {
                                        String instanceNameInstance;
                                        instanceNameInstance = instanceNameElement.getTextContent();
                                        roleInstanceInstance.setInstanceName(instanceNameInstance);
                                    }

                                    Element instanceStatusElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceStatus");
                                    if (instanceStatusElement != null) {
                                        String instanceStatusInstance;
                                        instanceStatusInstance = instanceStatusElement.getTextContent();
                                        roleInstanceInstance.setInstanceStatus(instanceStatusInstance);
                                    }

                                    Element instanceUpgradeDomainElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceUpgradeDomain");
                                    if (instanceUpgradeDomainElement != null
                                            && instanceUpgradeDomainElement.getTextContent() != null
                                            && !instanceUpgradeDomainElement.getTextContent().isEmpty()) {
                                        int instanceUpgradeDomainInstance;
                                        instanceUpgradeDomainInstance = DatatypeConverter
                                                .parseInt(instanceUpgradeDomainElement.getTextContent());
                                        roleInstanceInstance
                                                .setInstanceUpgradeDomain(instanceUpgradeDomainInstance);
                                    }

                                    Element instanceFaultDomainElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceFaultDomain");
                                    if (instanceFaultDomainElement != null
                                            && instanceFaultDomainElement.getTextContent() != null
                                            && !instanceFaultDomainElement.getTextContent().isEmpty()) {
                                        int instanceFaultDomainInstance;
                                        instanceFaultDomainInstance = DatatypeConverter
                                                .parseInt(instanceFaultDomainElement.getTextContent());
                                        roleInstanceInstance.setInstanceFaultDomain(instanceFaultDomainInstance);
                                    }

                                    Element instanceSizeElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceSize");
                                    if (instanceSizeElement != null) {
                                        String instanceSizeInstance;
                                        instanceSizeInstance = instanceSizeElement.getTextContent();
                                        roleInstanceInstance.setInstanceSize(instanceSizeInstance);
                                    }

                                    Element instanceStateDetailsElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceStateDetails");
                                    if (instanceStateDetailsElement != null) {
                                        String instanceStateDetailsInstance;
                                        instanceStateDetailsInstance = instanceStateDetailsElement.getTextContent();
                                        roleInstanceInstance.setInstanceStateDetails(instanceStateDetailsInstance);
                                    }

                                    Element instanceErrorCodeElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceErrorCode");
                                    if (instanceErrorCodeElement != null) {
                                        String instanceErrorCodeInstance;
                                        instanceErrorCodeInstance = instanceErrorCodeElement.getTextContent();
                                        roleInstanceInstance.setInstanceErrorCode(instanceErrorCodeInstance);
                                    }

                                    Element ipAddressElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "IpAddress");
                                    if (ipAddressElement != null) {
                                        InetAddress ipAddressInstance;
                                        ipAddressInstance = InetAddress
                                                .getByName(ipAddressElement.getTextContent());
                                        roleInstanceInstance.setIPAddress(ipAddressInstance);
                                    }

                                    Element instanceEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "InstanceEndpoints");
                                    if (instanceEndpointsSequenceElement != null) {
                                        for (int i3 = 0; i3 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(instanceEndpointsSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "InstanceEndpoint")
                                                .size(); i3 = i3 + 1) {
                                            org.w3c.dom.Element instanceEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(instanceEndpointsSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "InstanceEndpoint")
                                                    .get(i3));
                                            InstanceEndpoint instanceEndpointInstance = new InstanceEndpoint();
                                            roleInstanceInstance.getInstanceEndpoints()
                                                    .add(instanceEndpointInstance);

                                            Element localPortElement = XmlUtility.getElementByTagNameNS(
                                                    instanceEndpointsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "LocalPort");
                                            if (localPortElement != null
                                                    && localPortElement.getTextContent() != null
                                                    && !localPortElement.getTextContent().isEmpty()) {
                                                int localPortInstance;
                                                localPortInstance = DatatypeConverter
                                                        .parseInt(localPortElement.getTextContent());
                                                instanceEndpointInstance.setLocalPort(localPortInstance);
                                            }

                                            Element nameElement2 = XmlUtility.getElementByTagNameNS(
                                                    instanceEndpointsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Name");
                                            if (nameElement2 != null) {
                                                String nameInstance2;
                                                nameInstance2 = nameElement2.getTextContent();
                                                instanceEndpointInstance.setName(nameInstance2);
                                            }

                                            Element publicPortElement = XmlUtility.getElementByTagNameNS(
                                                    instanceEndpointsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "PublicPort");
                                            if (publicPortElement != null) {
                                                int publicPortInstance;
                                                publicPortInstance = DatatypeConverter
                                                        .parseInt(publicPortElement.getTextContent());
                                                instanceEndpointInstance.setPort(publicPortInstance);
                                            }

                                            Element protocolElement = XmlUtility.getElementByTagNameNS(
                                                    instanceEndpointsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Protocol");
                                            if (protocolElement != null) {
                                                String protocolInstance;
                                                protocolInstance = protocolElement.getTextContent();
                                                instanceEndpointInstance.setProtocol(protocolInstance);
                                            }

                                            Element vipElement = XmlUtility.getElementByTagNameNS(
                                                    instanceEndpointsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Vip");
                                            if (vipElement != null) {
                                                InetAddress vipInstance;
                                                vipInstance = InetAddress.getByName(vipElement.getTextContent());
                                                instanceEndpointInstance.setVirtualIPAddress(vipInstance);
                                            }

                                            Element idleTimeoutInMinutesElement = XmlUtility.getElementByTagNameNS(
                                                    instanceEndpointsElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "IdleTimeoutInMinutes");
                                            if (idleTimeoutInMinutesElement != null
                                                    && idleTimeoutInMinutesElement.getTextContent() != null
                                                    && !idleTimeoutInMinutesElement.getTextContent().isEmpty()) {
                                                int idleTimeoutInMinutesInstance;
                                                idleTimeoutInMinutesInstance = DatatypeConverter
                                                        .parseInt(idleTimeoutInMinutesElement.getTextContent());
                                                instanceEndpointInstance
                                                        .setIdleTimeoutInMinutes(idleTimeoutInMinutesInstance);
                                            }
                                        }
                                    }

                                    Element guestAgentStatusElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "GuestAgentStatus");
                                    if (guestAgentStatusElement != null) {
                                        GuestAgentStatus guestAgentStatusInstance = new GuestAgentStatus();
                                        roleInstanceInstance.setGuestAgentStatus(guestAgentStatusInstance);

                                        Element protocolVersionElement = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "ProtocolVersion");
                                        if (protocolVersionElement != null) {
                                            String protocolVersionInstance;
                                            protocolVersionInstance = protocolVersionElement.getTextContent();
                                            guestAgentStatusInstance.setProtocolVersion(protocolVersionInstance);
                                        }

                                        Element timestampElement = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "Timestamp");
                                        if (timestampElement != null && timestampElement.getTextContent() != null
                                                && !timestampElement.getTextContent().isEmpty()) {
                                            Calendar timestampInstance;
                                            timestampInstance = DatatypeConverter
                                                    .parseDateTime(timestampElement.getTextContent());
                                            guestAgentStatusInstance.setTimestamp(timestampInstance);
                                        }

                                        Element guestAgentVersionElement = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "GuestAgentVersion");
                                        if (guestAgentVersionElement != null) {
                                            String guestAgentVersionInstance;
                                            guestAgentVersionInstance = guestAgentVersionElement.getTextContent();
                                            guestAgentStatusInstance
                                                    .setGuestAgentVersion(guestAgentVersionInstance);
                                        }

                                        Element statusElement2 = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "Status");
                                        if (statusElement2 != null) {
                                            String statusInstance2;
                                            statusInstance2 = statusElement2.getTextContent();
                                            guestAgentStatusInstance.setStatus(statusInstance2);
                                        }

                                        Element codeElement = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "Code");
                                        if (codeElement != null && codeElement.getTextContent() != null
                                                && !codeElement.getTextContent().isEmpty()) {
                                            int codeInstance;
                                            codeInstance = DatatypeConverter.parseInt(codeElement.getTextContent());
                                            guestAgentStatusInstance.setCode(codeInstance);
                                        }

                                        Element messageElement = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "Message");
                                        if (messageElement != null) {
                                            GuestAgentMessage messageInstance = new GuestAgentMessage();
                                            guestAgentStatusInstance.setMessage(messageInstance);

                                            Element messageResourceIdElement = XmlUtility.getElementByTagNameNS(
                                                    messageElement, "http://schemas.microsoft.com/windowsazure",
                                                    "MessageResourceId");
                                            if (messageResourceIdElement != null) {
                                                String messageResourceIdInstance;
                                                messageResourceIdInstance = messageResourceIdElement
                                                        .getTextContent();
                                                messageInstance.setMessageResourceId(messageResourceIdInstance);
                                            }

                                            Element paramListSequenceElement = XmlUtility.getElementByTagNameNS(
                                                    messageElement, "http://schemas.microsoft.com/windowsazure",
                                                    "ParamList");
                                            if (paramListSequenceElement != null) {
                                                for (int i4 = 0; i4 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(paramListSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Param")
                                                        .size(); i4 = i4 + 1) {
                                                    org.w3c.dom.Element paramListElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(paramListSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "Param")
                                                            .get(i4));
                                                    messageInstance.getParamList()
                                                            .add(paramListElement.getTextContent());
                                                }
                                            }
                                        }

                                        Element formattedMessageElement = XmlUtility.getElementByTagNameNS(
                                                guestAgentStatusElement,
                                                "http://schemas.microsoft.com/windowsazure", "FormattedMessage");
                                        if (formattedMessageElement != null) {
                                            GuestAgentFormattedMessage formattedMessageInstance = new GuestAgentFormattedMessage();
                                            guestAgentStatusInstance.setFormattedMessage(formattedMessageInstance);

                                            Element languageElement = XmlUtility.getElementByTagNameNS(
                                                    formattedMessageElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Language");
                                            if (languageElement != null) {
                                                String languageInstance;
                                                languageInstance = languageElement.getTextContent();
                                                formattedMessageInstance.setLanguage(languageInstance);
                                            }

                                            Element messageElement2 = XmlUtility.getElementByTagNameNS(
                                                    formattedMessageElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Message");
                                            if (messageElement2 != null) {
                                                String messageInstance2;
                                                messageInstance2 = messageElement2.getTextContent();
                                                formattedMessageInstance.setMessage(messageInstance2);
                                            }
                                        }
                                    }

                                    Element resourceExtensionStatusListSequenceElement = XmlUtility
                                            .getElementByTagNameNS(roleInstanceListElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "ResourceExtensionStatusList");
                                    if (resourceExtensionStatusListSequenceElement != null) {
                                        for (int i5 = 0; i5 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(resourceExtensionStatusListSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "ResourceExtensionStatus")
                                                .size(); i5 = i5 + 1) {
                                            org.w3c.dom.Element resourceExtensionStatusListElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(
                                                            resourceExtensionStatusListSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "ResourceExtensionStatus")
                                                    .get(i5));
                                            ResourceExtensionStatus resourceExtensionStatusInstance = new ResourceExtensionStatus();
                                            roleInstanceInstance.getResourceExtensionStatusList()
                                                    .add(resourceExtensionStatusInstance);

                                            Element handlerNameElement = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionStatusListElement,
                                                    "http://schemas.microsoft.com/windowsazure", "HandlerName");
                                            if (handlerNameElement != null) {
                                                String handlerNameInstance;
                                                handlerNameInstance = handlerNameElement.getTextContent();
                                                resourceExtensionStatusInstance.setHandlerName(handlerNameInstance);
                                            }

                                            Element versionElement = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionStatusListElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Version");
                                            if (versionElement != null) {
                                                String versionInstance;
                                                versionInstance = versionElement.getTextContent();
                                                resourceExtensionStatusInstance.setVersion(versionInstance);
                                            }

                                            Element statusElement3 = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionStatusListElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Status");
                                            if (statusElement3 != null) {
                                                String statusInstance3;
                                                statusInstance3 = statusElement3.getTextContent();
                                                resourceExtensionStatusInstance.setStatus(statusInstance3);
                                            }

                                            Element codeElement2 = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionStatusListElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Code");
                                            if (codeElement2 != null && codeElement2.getTextContent() != null
                                                    && !codeElement2.getTextContent().isEmpty()) {
                                                int codeInstance2;
                                                codeInstance2 = DatatypeConverter
                                                        .parseInt(codeElement2.getTextContent());
                                                resourceExtensionStatusInstance.setCode(codeInstance2);
                                            }

                                            Element messageElement3 = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionStatusListElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Message");
                                            if (messageElement3 != null) {
                                                GuestAgentMessage messageInstance3 = new GuestAgentMessage();
                                                resourceExtensionStatusInstance.setMessage(messageInstance3);

                                                Element messageResourceIdElement2 = XmlUtility
                                                        .getElementByTagNameNS(messageElement3,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "MessageResourceId");
                                                if (messageResourceIdElement2 != null) {
                                                    String messageResourceIdInstance2;
                                                    messageResourceIdInstance2 = messageResourceIdElement2
                                                            .getTextContent();
                                                    messageInstance3
                                                            .setMessageResourceId(messageResourceIdInstance2);
                                                }

                                                Element paramListSequenceElement2 = XmlUtility
                                                        .getElementByTagNameNS(messageElement3,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "ParamList");
                                                if (paramListSequenceElement2 != null) {
                                                    for (int i6 = 0; i6 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(paramListSequenceElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "Param")
                                                            .size(); i6 = i6 + 1) {
                                                        org.w3c.dom.Element paramListElement2 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(paramListSequenceElement2,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Param")
                                                                .get(i6));
                                                        messageInstance3.getParamList()
                                                                .add(paramListElement2.getTextContent());
                                                    }
                                                }
                                            }

                                            Element formattedMessageElement2 = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionStatusListElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "FormattedMessage");
                                            if (formattedMessageElement2 != null) {
                                                GuestAgentFormattedMessage formattedMessageInstance2 = new GuestAgentFormattedMessage();
                                                resourceExtensionStatusInstance
                                                        .setFormattedMessage(formattedMessageInstance2);

                                                Element languageElement2 = XmlUtility.getElementByTagNameNS(
                                                        formattedMessageElement2,
                                                        "http://schemas.microsoft.com/windowsazure", "Language");
                                                if (languageElement2 != null) {
                                                    String languageInstance2;
                                                    languageInstance2 = languageElement2.getTextContent();
                                                    formattedMessageInstance2.setLanguage(languageInstance2);
                                                }

                                                Element messageElement4 = XmlUtility.getElementByTagNameNS(
                                                        formattedMessageElement2,
                                                        "http://schemas.microsoft.com/windowsazure", "Message");
                                                if (messageElement4 != null) {
                                                    String messageInstance4;
                                                    messageInstance4 = messageElement4.getTextContent();
                                                    formattedMessageInstance2.setMessage(messageInstance4);
                                                }
                                            }

                                            Element extensionSettingStatusElement = XmlUtility
                                                    .getElementByTagNameNS(resourceExtensionStatusListElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "ExtensionSettingStatus");
                                            if (extensionSettingStatusElement != null) {
                                                ResourceExtensionConfigurationStatus extensionSettingStatusInstance = new ResourceExtensionConfigurationStatus();
                                                resourceExtensionStatusInstance
                                                        .setExtensionSettingStatus(extensionSettingStatusInstance);

                                                Element timestampElement2 = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Timestamp");
                                                if (timestampElement2 != null
                                                        && timestampElement2.getTextContent() != null
                                                        && !timestampElement2.getTextContent().isEmpty()) {
                                                    Calendar timestampInstance2;
                                                    timestampInstance2 = DatatypeConverter
                                                            .parseDateTime(timestampElement2.getTextContent());
                                                    extensionSettingStatusInstance.setTimestamp(timestampInstance2);
                                                }

                                                Element configurationAppliedTimeElement = XmlUtility
                                                        .getElementByTagNameNS(extensionSettingStatusElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "ConfigurationAppliedTime");
                                                if (configurationAppliedTimeElement != null
                                                        && configurationAppliedTimeElement.getTextContent() != null
                                                        && !configurationAppliedTimeElement.getTextContent()
                                                                .isEmpty()) {
                                                    Calendar configurationAppliedTimeInstance;
                                                    configurationAppliedTimeInstance = DatatypeConverter
                                                            .parseDateTime(configurationAppliedTimeElement
                                                                    .getTextContent());
                                                    extensionSettingStatusInstance.setConfigurationAppliedTime(
                                                            configurationAppliedTimeInstance);
                                                }

                                                Element nameElement3 = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Name");
                                                if (nameElement3 != null) {
                                                    String nameInstance3;
                                                    nameInstance3 = nameElement3.getTextContent();
                                                    extensionSettingStatusInstance.setName(nameInstance3);
                                                }

                                                Element operationElement = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Operation");
                                                if (operationElement != null) {
                                                    String operationInstance;
                                                    operationInstance = operationElement.getTextContent();
                                                    extensionSettingStatusInstance.setOperation(operationInstance);
                                                }

                                                Element statusElement4 = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Status");
                                                if (statusElement4 != null) {
                                                    String statusInstance4;
                                                    statusInstance4 = statusElement4.getTextContent();
                                                    extensionSettingStatusInstance.setStatus(statusInstance4);
                                                }

                                                Element codeElement3 = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Code");
                                                if (codeElement3 != null && codeElement3.getTextContent() != null
                                                        && !codeElement3.getTextContent().isEmpty()) {
                                                    int codeInstance3;
                                                    codeInstance3 = DatatypeConverter
                                                            .parseInt(codeElement3.getTextContent());
                                                    extensionSettingStatusInstance.setCode(codeInstance3);
                                                }

                                                Element messageElement5 = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Message");
                                                if (messageElement5 != null) {
                                                    GuestAgentMessage messageInstance5 = new GuestAgentMessage();
                                                    extensionSettingStatusInstance.setMessage(messageInstance5);

                                                    Element messageResourceIdElement3 = XmlUtility
                                                            .getElementByTagNameNS(messageElement5,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "MessageResourceId");
                                                    if (messageResourceIdElement3 != null) {
                                                        String messageResourceIdInstance3;
                                                        messageResourceIdInstance3 = messageResourceIdElement3
                                                                .getTextContent();
                                                        messageInstance5
                                                                .setMessageResourceId(messageResourceIdInstance3);
                                                    }

                                                    Element paramListSequenceElement3 = XmlUtility
                                                            .getElementByTagNameNS(messageElement5,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "ParamList");
                                                    if (paramListSequenceElement3 != null) {
                                                        for (int i7 = 0; i7 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(paramListSequenceElement3,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Param")
                                                                .size(); i7 = i7 + 1) {
                                                            org.w3c.dom.Element paramListElement3 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                    .getElementsByTagNameNS(
                                                                            paramListSequenceElement3,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "Param")
                                                                    .get(i7));
                                                            messageInstance5.getParamList()
                                                                    .add(paramListElement3.getTextContent());
                                                        }
                                                    }
                                                }

                                                Element formattedMessageElement3 = XmlUtility.getElementByTagNameNS(
                                                        extensionSettingStatusElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "FormattedMessage");
                                                if (formattedMessageElement3 != null) {
                                                    GuestAgentFormattedMessage formattedMessageInstance3 = new GuestAgentFormattedMessage();
                                                    extensionSettingStatusInstance
                                                            .setFormattedMessage(formattedMessageInstance3);

                                                    Element languageElement3 = XmlUtility.getElementByTagNameNS(
                                                            formattedMessageElement3,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "Language");
                                                    if (languageElement3 != null) {
                                                        String languageInstance3;
                                                        languageInstance3 = languageElement3.getTextContent();
                                                        formattedMessageInstance3.setLanguage(languageInstance3);
                                                    }

                                                    Element messageElement6 = XmlUtility.getElementByTagNameNS(
                                                            formattedMessageElement3,
                                                            "http://schemas.microsoft.com/windowsazure", "Message");
                                                    if (messageElement6 != null) {
                                                        String messageInstance6;
                                                        messageInstance6 = messageElement6.getTextContent();
                                                        formattedMessageInstance3.setMessage(messageInstance6);
                                                    }
                                                }

                                                Element subStatusListSequenceElement = XmlUtility
                                                        .getElementByTagNameNS(extensionSettingStatusElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "SubStatusList");
                                                if (subStatusListSequenceElement != null) {
                                                    for (int i8 = 0; i8 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(subStatusListSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "SubStatus")
                                                            .size(); i8 = i8 + 1) {
                                                        org.w3c.dom.Element subStatusListElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(
                                                                        subStatusListSequenceElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "SubStatus")
                                                                .get(i8));
                                                        ResourceExtensionSubStatus subStatusInstance = new ResourceExtensionSubStatus();
                                                        extensionSettingStatusInstance.getSubStatusList()
                                                                .add(subStatusInstance);

                                                        Element nameElement4 = XmlUtility.getElementByTagNameNS(
                                                                subStatusListElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Name");
                                                        if (nameElement4 != null) {
                                                            String nameInstance4;
                                                            nameInstance4 = nameElement4.getTextContent();
                                                            subStatusInstance.setName(nameInstance4);
                                                        }

                                                        Element statusElement5 = XmlUtility.getElementByTagNameNS(
                                                                subStatusListElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Status");
                                                        if (statusElement5 != null) {
                                                            String statusInstance5;
                                                            statusInstance5 = statusElement5.getTextContent();
                                                            subStatusInstance.setStatus(statusInstance5);
                                                        }

                                                        Element codeElement4 = XmlUtility.getElementByTagNameNS(
                                                                subStatusListElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Code");
                                                        if (codeElement4 != null
                                                                && codeElement4.getTextContent() != null
                                                                && !codeElement4.getTextContent().isEmpty()) {
                                                            int codeInstance4;
                                                            codeInstance4 = DatatypeConverter
                                                                    .parseInt(codeElement4.getTextContent());
                                                            subStatusInstance.setCode(codeInstance4);
                                                        }

                                                        Element messageElement7 = XmlUtility.getElementByTagNameNS(
                                                                subStatusListElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Message");
                                                        if (messageElement7 != null) {
                                                            GuestAgentMessage messageInstance7 = new GuestAgentMessage();
                                                            subStatusInstance.setMessage(messageInstance7);

                                                            Element messageResourceIdElement4 = XmlUtility
                                                                    .getElementByTagNameNS(messageElement7,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "MessageResourceId");
                                                            if (messageResourceIdElement4 != null) {
                                                                String messageResourceIdInstance4;
                                                                messageResourceIdInstance4 = messageResourceIdElement4
                                                                        .getTextContent();
                                                                messageInstance7.setMessageResourceId(
                                                                        messageResourceIdInstance4);
                                                            }

                                                            Element paramListSequenceElement4 = XmlUtility
                                                                    .getElementByTagNameNS(messageElement7,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "ParamList");
                                                            if (paramListSequenceElement4 != null) {
                                                                for (int i9 = 0; i9 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                                        .getElementsByTagNameNS(
                                                                                paramListSequenceElement4,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "Param")
                                                                        .size(); i9 = i9 + 1) {
                                                                    org.w3c.dom.Element paramListElement4 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                            .getElementsByTagNameNS(
                                                                                    paramListSequenceElement4,
                                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                                    "Param")
                                                                            .get(i9));
                                                                    messageInstance7.getParamList().add(
                                                                            paramListElement4.getTextContent());
                                                                }
                                                            }
                                                        }

                                                        Element formattedMessageElement4 = XmlUtility
                                                                .getElementByTagNameNS(subStatusListElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "FormattedMessage");
                                                        if (formattedMessageElement4 != null) {
                                                            GuestAgentFormattedMessage formattedMessageInstance4 = new GuestAgentFormattedMessage();
                                                            subStatusInstance
                                                                    .setFormattedMessage(formattedMessageInstance4);

                                                            Element languageElement4 = XmlUtility
                                                                    .getElementByTagNameNS(formattedMessageElement4,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "Language");
                                                            if (languageElement4 != null) {
                                                                String languageInstance4;
                                                                languageInstance4 = languageElement4
                                                                        .getTextContent();
                                                                formattedMessageInstance4
                                                                        .setLanguage(languageInstance4);
                                                            }

                                                            Element messageElement8 = XmlUtility
                                                                    .getElementByTagNameNS(formattedMessageElement4,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "Message");
                                                            if (messageElement8 != null) {
                                                                String messageInstance8;
                                                                messageInstance8 = messageElement8.getTextContent();
                                                                formattedMessageInstance4
                                                                        .setMessage(messageInstance8);
                                                            }
                                                        }
                                                    }
                                                }
                                            }
                                        }
                                    }

                                    Element powerStateElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "PowerState");
                                    if (powerStateElement != null && powerStateElement.getTextContent() != null
                                            && !powerStateElement.getTextContent().isEmpty()) {
                                        RoleInstancePowerState powerStateInstance;
                                        powerStateInstance = RoleInstancePowerState
                                                .valueOf(powerStateElement.getTextContent());
                                        roleInstanceInstance.setPowerState(powerStateInstance);
                                    }

                                    Element hostNameElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "HostName");
                                    if (hostNameElement != null) {
                                        String hostNameInstance;
                                        hostNameInstance = hostNameElement.getTextContent();
                                        roleInstanceInstance.setHostName(hostNameInstance);
                                    }

                                    Element remoteAccessCertificateThumbprintElement = XmlUtility
                                            .getElementByTagNameNS(roleInstanceListElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "RemoteAccessCertificateThumbprint");
                                    if (remoteAccessCertificateThumbprintElement != null) {
                                        String remoteAccessCertificateThumbprintInstance;
                                        remoteAccessCertificateThumbprintInstance = remoteAccessCertificateThumbprintElement
                                                .getTextContent();
                                        roleInstanceInstance.setRemoteAccessCertificateThumbprint(
                                                remoteAccessCertificateThumbprintInstance);
                                    }

                                    Element publicIPsSequenceElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "PublicIPs");
                                    if (publicIPsSequenceElement != null) {
                                        for (int i10 = 0; i10 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(publicIPsSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure", "PublicIP")
                                                .size(); i10 = i10 + 1) {
                                            org.w3c.dom.Element publicIPsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(publicIPsSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure", "PublicIP")
                                                    .get(i10));
                                            RoleInstance.PublicIP publicIPInstance = new RoleInstance.PublicIP();
                                            roleInstanceInstance.getPublicIPs().add(publicIPInstance);

                                            Element nameElement5 = XmlUtility.getElementByTagNameNS(
                                                    publicIPsElement, "http://schemas.microsoft.com/windowsazure",
                                                    "Name");
                                            if (nameElement5 != null) {
                                                String nameInstance5;
                                                nameInstance5 = nameElement5.getTextContent();
                                                publicIPInstance.setName(nameInstance5);
                                            }

                                            Element addressElement = XmlUtility.getElementByTagNameNS(
                                                    publicIPsElement, "http://schemas.microsoft.com/windowsazure",
                                                    "Address");
                                            if (addressElement != null) {
                                                InetAddress addressInstance;
                                                addressInstance = InetAddress
                                                        .getByName(addressElement.getTextContent());
                                                publicIPInstance.setAddress(addressInstance);
                                            }

                                            Element idleTimeoutInMinutesElement2 = XmlUtility.getElementByTagNameNS(
                                                    publicIPsElement, "http://schemas.microsoft.com/windowsazure",
                                                    "IdleTimeoutInMinutes");
                                            if (idleTimeoutInMinutesElement2 != null
                                                    && idleTimeoutInMinutesElement2.getTextContent() != null
                                                    && !idleTimeoutInMinutesElement2.getTextContent().isEmpty()) {
                                                int idleTimeoutInMinutesInstance2;
                                                idleTimeoutInMinutesInstance2 = DatatypeConverter
                                                        .parseInt(idleTimeoutInMinutesElement2.getTextContent());
                                                publicIPInstance
                                                        .setIdleTimeoutInMinutes(idleTimeoutInMinutesInstance2);
                                            }

                                            Element domainNameLabelElement = XmlUtility.getElementByTagNameNS(
                                                    publicIPsElement, "http://schemas.microsoft.com/windowsazure",
                                                    "DomainNameLabel");
                                            if (domainNameLabelElement != null) {
                                                String domainNameLabelInstance;
                                                domainNameLabelInstance = domainNameLabelElement.getTextContent();
                                                publicIPInstance.setDomainNameLabel(domainNameLabelInstance);
                                            }

                                            Element fqdnsSequenceElement = XmlUtility.getElementByTagNameNS(
                                                    publicIPsElement, "http://schemas.microsoft.com/windowsazure",
                                                    "Fqdns");
                                            if (fqdnsSequenceElement != null) {
                                                for (int i11 = 0; i11 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(fqdnsSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure", "Fqdn")
                                                        .size(); i11 = i11 + 1) {
                                                    org.w3c.dom.Element fqdnsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(fqdnsSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "Fqdn")
                                                            .get(i11));
                                                    publicIPInstance.getFqdns().add(fqdnsElement.getTextContent());
                                                }
                                            }
                                        }
                                    }

                                    Element networkInterfacesSequenceElement = XmlUtility.getElementByTagNameNS(
                                            roleInstanceListElement, "http://schemas.microsoft.com/windowsazure",
                                            "NetworkInterfaces");
                                    if (networkInterfacesSequenceElement != null) {
                                        for (int i12 = 0; i12 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(networkInterfacesSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "NetworkInterface")
                                                .size(); i12 = i12 + 1) {
                                            org.w3c.dom.Element networkInterfacesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(networkInterfacesSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "NetworkInterface")
                                                    .get(i12));
                                            NetworkInterfaceInstance networkInterfaceInstance = new NetworkInterfaceInstance();
                                            roleInstanceInstance.getNetworkInterfaces()
                                                    .add(networkInterfaceInstance);

                                            Element nameElement6 = XmlUtility.getElementByTagNameNS(
                                                    networkInterfacesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Name");
                                            if (nameElement6 != null) {
                                                String nameInstance6;
                                                nameInstance6 = nameElement6.getTextContent();
                                                networkInterfaceInstance.setName(nameInstance6);
                                            }

                                            Element macAddressElement = XmlUtility.getElementByTagNameNS(
                                                    networkInterfacesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "MacAddress");
                                            if (macAddressElement != null) {
                                                String macAddressInstance;
                                                macAddressInstance = macAddressElement.getTextContent();
                                                networkInterfaceInstance.setMacAddress(macAddressInstance);
                                            }

                                            Element iPConfigurationsSequenceElement = XmlUtility
                                                    .getElementByTagNameNS(networkInterfacesElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "IPConfigurations");
                                            if (iPConfigurationsSequenceElement != null) {
                                                for (int i13 = 0; i13 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(iPConfigurationsSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "IPConfiguration")
                                                        .size(); i13 = i13 + 1) {
                                                    org.w3c.dom.Element iPConfigurationsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(iPConfigurationsSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "IPConfiguration")
                                                            .get(i13));
                                                    IPConfigurationInstance iPConfigurationInstance = new IPConfigurationInstance();
                                                    networkInterfaceInstance.getIPConfigurations()
                                                            .add(iPConfigurationInstance);

                                                    Element subnetNameElement = XmlUtility.getElementByTagNameNS(
                                                            iPConfigurationsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "SubnetName");
                                                    if (subnetNameElement != null) {
                                                        String subnetNameInstance;
                                                        subnetNameInstance = subnetNameElement.getTextContent();
                                                        iPConfigurationInstance.setSubnetName(subnetNameInstance);
                                                    }

                                                    Element addressElement2 = XmlUtility.getElementByTagNameNS(
                                                            iPConfigurationsElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Address");
                                                    if (addressElement2 != null) {
                                                        String addressInstance2;
                                                        addressInstance2 = addressElement2.getTextContent();
                                                        iPConfigurationInstance.setAddress(addressInstance2);
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            Element upgradeStatusElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "UpgradeStatus");
                            if (upgradeStatusElement != null) {
                                UpgradeStatus upgradeStatusInstance = new UpgradeStatus();
                                deploymentInstance.setUpgradeStatus(upgradeStatusInstance);

                                Element upgradeTypeElement = XmlUtility.getElementByTagNameNS(upgradeStatusElement,
                                        "http://schemas.microsoft.com/windowsazure", "UpgradeType");
                                if (upgradeTypeElement != null && upgradeTypeElement.getTextContent() != null
                                        && !upgradeTypeElement.getTextContent().isEmpty()) {
                                    DeploymentUpgradeType upgradeTypeInstance;
                                    upgradeTypeInstance = DeploymentUpgradeType
                                            .valueOf(upgradeTypeElement.getTextContent());
                                    upgradeStatusInstance.setUpgradeType(upgradeTypeInstance);
                                }

                                Element currentUpgradeDomainStateElement = XmlUtility.getElementByTagNameNS(
                                        upgradeStatusElement, "http://schemas.microsoft.com/windowsazure",
                                        "CurrentUpgradeDomainState");
                                if (currentUpgradeDomainStateElement != null
                                        && currentUpgradeDomainStateElement.getTextContent() != null
                                        && !currentUpgradeDomainStateElement.getTextContent().isEmpty()) {
                                    UpgradeDomainState currentUpgradeDomainStateInstance;
                                    currentUpgradeDomainStateInstance = UpgradeDomainState
                                            .valueOf(currentUpgradeDomainStateElement.getTextContent());
                                    upgradeStatusInstance
                                            .setCurrentUpgradeDomainState(currentUpgradeDomainStateInstance);
                                }

                                Element currentUpgradeDomainElement = XmlUtility.getElementByTagNameNS(
                                        upgradeStatusElement, "http://schemas.microsoft.com/windowsazure",
                                        "CurrentUpgradeDomain");
                                if (currentUpgradeDomainElement != null) {
                                    int currentUpgradeDomainInstance;
                                    currentUpgradeDomainInstance = DatatypeConverter
                                            .parseInt(currentUpgradeDomainElement.getTextContent());
                                    upgradeStatusInstance.setCurrentUpgradeDomain(currentUpgradeDomainInstance);
                                }
                            }

                            Element upgradeDomainCountElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "UpgradeDomainCount");
                            if (upgradeDomainCountElement != null) {
                                int upgradeDomainCountInstance;
                                upgradeDomainCountInstance = DatatypeConverter
                                        .parseInt(upgradeDomainCountElement.getTextContent());
                                deploymentInstance.setUpgradeDomainCount(upgradeDomainCountInstance);
                            }

                            Element roleListSequenceElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "RoleList");
                            if (roleListSequenceElement != null) {
                                for (int i14 = 0; i14 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(roleListSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "Role")
                                        .size(); i14 = i14 + 1) {
                                    org.w3c.dom.Element roleListElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(roleListSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Role")
                                            .get(i14));
                                    Role roleInstance = new Role();
                                    deploymentInstance.getRoles().add(roleInstance);

                                    Element roleNameElement2 = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleName");
                                    if (roleNameElement2 != null) {
                                        String roleNameInstance2;
                                        roleNameInstance2 = roleNameElement2.getTextContent();
                                        roleInstance.setRoleName(roleNameInstance2);
                                    }

                                    Element osVersionElement = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "OsVersion");
                                    if (osVersionElement != null) {
                                        String osVersionInstance;
                                        osVersionInstance = osVersionElement.getTextContent();
                                        roleInstance.setOSVersion(osVersionInstance);
                                    }

                                    Element roleTypeElement = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleType");
                                    if (roleTypeElement != null) {
                                        String roleTypeInstance;
                                        roleTypeInstance = roleTypeElement.getTextContent();
                                        roleInstance.setRoleType(roleTypeInstance);
                                    }

                                    Element configurationSetsSequenceElement = XmlUtility.getElementByTagNameNS(
                                            roleListElement, "http://schemas.microsoft.com/windowsazure",
                                            "ConfigurationSets");
                                    if (configurationSetsSequenceElement != null) {
                                        for (int i15 = 0; i15 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(configurationSetsSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "ConfigurationSet")
                                                .size(); i15 = i15 + 1) {
                                            org.w3c.dom.Element configurationSetsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(configurationSetsSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "ConfigurationSet")
                                                    .get(i15));
                                            ConfigurationSet configurationSetInstance = new ConfigurationSet();
                                            roleInstance.getConfigurationSets().add(configurationSetInstance);

                                            Element configurationSetTypeElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "ConfigurationSetType");
                                            if (configurationSetTypeElement != null) {
                                                String configurationSetTypeInstance;
                                                configurationSetTypeInstance = configurationSetTypeElement
                                                        .getTextContent();
                                                configurationSetInstance
                                                        .setConfigurationSetType(configurationSetTypeInstance);
                                            }

                                            Element inputEndpointsSequenceElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "InputEndpoints");
                                            if (inputEndpointsSequenceElement != null) {
                                                for (int i16 = 0; i16 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(inputEndpointsSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "InputEndpoint")
                                                        .size(); i16 = i16 + 1) {
                                                    org.w3c.dom.Element inputEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(inputEndpointsSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "InputEndpoint")
                                                            .get(i16));
                                                    InputEndpoint inputEndpointInstance = new InputEndpoint();
                                                    configurationSetInstance.getInputEndpoints()
                                                            .add(inputEndpointInstance);

                                                    Element loadBalancedEndpointSetNameElement = XmlUtility
                                                            .getElementByTagNameNS(inputEndpointsElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "LoadBalancedEndpointSetName");
                                                    if (loadBalancedEndpointSetNameElement != null) {
                                                        String loadBalancedEndpointSetNameInstance;
                                                        loadBalancedEndpointSetNameInstance = loadBalancedEndpointSetNameElement
                                                                .getTextContent();
                                                        inputEndpointInstance.setLoadBalancedEndpointSetName(
                                                                loadBalancedEndpointSetNameInstance);
                                                    }

                                                    Element localPortElement2 = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "LocalPort");
                                                    if (localPortElement2 != null
                                                            && localPortElement2.getTextContent() != null
                                                            && !localPortElement2.getTextContent().isEmpty()) {
                                                        int localPortInstance2;
                                                        localPortInstance2 = DatatypeConverter
                                                                .parseInt(localPortElement2.getTextContent());
                                                        inputEndpointInstance.setLocalPort(localPortInstance2);
                                                    }

                                                    Element nameElement7 = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                                    if (nameElement7 != null) {
                                                        String nameInstance7;
                                                        nameInstance7 = nameElement7.getTextContent();
                                                        inputEndpointInstance.setName(nameInstance7);
                                                    }

                                                    Element portElement = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Port");
                                                    if (portElement != null && portElement.getTextContent() != null
                                                            && !portElement.getTextContent().isEmpty()) {
                                                        int portInstance;
                                                        portInstance = DatatypeConverter
                                                                .parseInt(portElement.getTextContent());
                                                        inputEndpointInstance.setPort(portInstance);
                                                    }

                                                    Element loadBalancerProbeElement = XmlUtility
                                                            .getElementByTagNameNS(inputEndpointsElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "LoadBalancerProbe");
                                                    if (loadBalancerProbeElement != null) {
                                                        LoadBalancerProbe loadBalancerProbeInstance = new LoadBalancerProbe();
                                                        inputEndpointInstance
                                                                .setLoadBalancerProbe(loadBalancerProbeInstance);

                                                        Element pathElement = XmlUtility.getElementByTagNameNS(
                                                                loadBalancerProbeElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Path");
                                                        if (pathElement != null) {
                                                            String pathInstance;
                                                            pathInstance = pathElement.getTextContent();
                                                            loadBalancerProbeInstance.setPath(pathInstance);
                                                        }

                                                        Element portElement2 = XmlUtility.getElementByTagNameNS(
                                                                loadBalancerProbeElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Port");
                                                        if (portElement2 != null) {
                                                            int portInstance2;
                                                            portInstance2 = DatatypeConverter
                                                                    .parseInt(portElement2.getTextContent());
                                                            loadBalancerProbeInstance.setPort(portInstance2);
                                                        }

                                                        Element protocolElement2 = XmlUtility.getElementByTagNameNS(
                                                                loadBalancerProbeElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Protocol");
                                                        if (protocolElement2 != null
                                                                && protocolElement2.getTextContent() != null
                                                                && !protocolElement2.getTextContent().isEmpty()) {
                                                            LoadBalancerProbeTransportProtocol protocolInstance2;
                                                            protocolInstance2 = com.microsoft.windowsazure.management.compute.ComputeManagementClientImpl
                                                                    .parseLoadBalancerProbeTransportProtocol(
                                                                            protocolElement2.getTextContent());
                                                            loadBalancerProbeInstance
                                                                    .setProtocol(protocolInstance2);
                                                        }

                                                        Element intervalInSecondsElement = XmlUtility
                                                                .getElementByTagNameNS(loadBalancerProbeElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "IntervalInSeconds");
                                                        if (intervalInSecondsElement != null
                                                                && intervalInSecondsElement.getTextContent() != null
                                                                && !intervalInSecondsElement.getTextContent()
                                                                        .isEmpty()) {
                                                            int intervalInSecondsInstance;
                                                            intervalInSecondsInstance = DatatypeConverter.parseInt(
                                                                    intervalInSecondsElement.getTextContent());
                                                            loadBalancerProbeInstance.setIntervalInSeconds(
                                                                    intervalInSecondsInstance);
                                                        }

                                                        Element timeoutInSecondsElement = XmlUtility
                                                                .getElementByTagNameNS(loadBalancerProbeElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "TimeoutInSeconds");
                                                        if (timeoutInSecondsElement != null
                                                                && timeoutInSecondsElement.getTextContent() != null
                                                                && !timeoutInSecondsElement.getTextContent()
                                                                        .isEmpty()) {
                                                            int timeoutInSecondsInstance;
                                                            timeoutInSecondsInstance = DatatypeConverter.parseInt(
                                                                    timeoutInSecondsElement.getTextContent());
                                                            loadBalancerProbeInstance
                                                                    .setTimeoutInSeconds(timeoutInSecondsInstance);
                                                        }
                                                    }

                                                    Element protocolElement3 = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "Protocol");
                                                    if (protocolElement3 != null) {
                                                        String protocolInstance3;
                                                        protocolInstance3 = protocolElement3.getTextContent();
                                                        inputEndpointInstance.setProtocol(protocolInstance3);
                                                    }

                                                    Element vipElement2 = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Vip");
                                                    if (vipElement2 != null) {
                                                        InetAddress vipInstance2;
                                                        vipInstance2 = InetAddress
                                                                .getByName(vipElement2.getTextContent());
                                                        inputEndpointInstance.setVirtualIPAddress(vipInstance2);
                                                    }

                                                    Element enableDirectServerReturnElement = XmlUtility
                                                            .getElementByTagNameNS(inputEndpointsElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "EnableDirectServerReturn");
                                                    if (enableDirectServerReturnElement != null
                                                            && enableDirectServerReturnElement
                                                                    .getTextContent() != null
                                                            && !enableDirectServerReturnElement.getTextContent()
                                                                    .isEmpty()) {
                                                        boolean enableDirectServerReturnInstance;
                                                        enableDirectServerReturnInstance = DatatypeConverter
                                                                .parseBoolean(enableDirectServerReturnElement
                                                                        .getTextContent().toLowerCase());
                                                        inputEndpointInstance.setEnableDirectServerReturn(
                                                                enableDirectServerReturnInstance);
                                                    }

                                                    Element loadBalancerNameElement = XmlUtility
                                                            .getElementByTagNameNS(inputEndpointsElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "LoadBalancerName");
                                                    if (loadBalancerNameElement != null) {
                                                        String loadBalancerNameInstance;
                                                        loadBalancerNameInstance = loadBalancerNameElement
                                                                .getTextContent();
                                                        inputEndpointInstance
                                                                .setLoadBalancerName(loadBalancerNameInstance);
                                                    }

                                                    Element endpointAclElement = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "EndpointAcl");
                                                    if (endpointAclElement != null) {
                                                        EndpointAcl endpointAclInstance = new EndpointAcl();
                                                        inputEndpointInstance.setEndpointAcl(endpointAclInstance);

                                                        Element rulesSequenceElement = XmlUtility
                                                                .getElementByTagNameNS(endpointAclElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Rules");
                                                        if (rulesSequenceElement != null) {
                                                            for (int i17 = 0; i17 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                                    .getElementsByTagNameNS(rulesSequenceElement,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "Rule")
                                                                    .size(); i17 = i17 + 1) {
                                                                org.w3c.dom.Element rulesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                        .getElementsByTagNameNS(
                                                                                rulesSequenceElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "Rule")
                                                                        .get(i17));
                                                                AccessControlListRule ruleInstance = new AccessControlListRule();
                                                                endpointAclInstance.getRules().add(ruleInstance);

                                                                Element orderElement = XmlUtility
                                                                        .getElementByTagNameNS(rulesElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "Order");
                                                                if (orderElement != null
                                                                        && orderElement.getTextContent() != null
                                                                        && !orderElement.getTextContent()
                                                                                .isEmpty()) {
                                                                    int orderInstance;
                                                                    orderInstance = DatatypeConverter.parseInt(
                                                                            orderElement.getTextContent());
                                                                    ruleInstance.setOrder(orderInstance);
                                                                }

                                                                Element actionElement = XmlUtility
                                                                        .getElementByTagNameNS(rulesElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "Action");
                                                                if (actionElement != null) {
                                                                    String actionInstance;
                                                                    actionInstance = actionElement.getTextContent();
                                                                    ruleInstance.setAction(actionInstance);
                                                                }

                                                                Element remoteSubnetElement = XmlUtility
                                                                        .getElementByTagNameNS(rulesElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "RemoteSubnet");
                                                                if (remoteSubnetElement != null) {
                                                                    String remoteSubnetInstance;
                                                                    remoteSubnetInstance = remoteSubnetElement
                                                                            .getTextContent();
                                                                    ruleInstance
                                                                            .setRemoteSubnet(remoteSubnetInstance);
                                                                }

                                                                Element descriptionElement = XmlUtility
                                                                        .getElementByTagNameNS(rulesElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "Description");
                                                                if (descriptionElement != null) {
                                                                    String descriptionInstance;
                                                                    descriptionInstance = descriptionElement
                                                                            .getTextContent();
                                                                    ruleInstance
                                                                            .setDescription(descriptionInstance);
                                                                }
                                                            }
                                                        }
                                                    }

                                                    Element idleTimeoutInMinutesElement3 = XmlUtility
                                                            .getElementByTagNameNS(inputEndpointsElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "IdleTimeoutInMinutes");
                                                    if (idleTimeoutInMinutesElement3 != null
                                                            && idleTimeoutInMinutesElement3.getTextContent() != null
                                                            && !idleTimeoutInMinutesElement3.getTextContent()
                                                                    .isEmpty()) {
                                                        int idleTimeoutInMinutesInstance3;
                                                        idleTimeoutInMinutesInstance3 = DatatypeConverter.parseInt(
                                                                idleTimeoutInMinutesElement3.getTextContent());
                                                        inputEndpointInstance.setIdleTimeoutInMinutes(
                                                                idleTimeoutInMinutesInstance3);
                                                    }

                                                    Element loadBalancerDistributionElement = XmlUtility
                                                            .getElementByTagNameNS(inputEndpointsElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "LoadBalancerDistribution");
                                                    if (loadBalancerDistributionElement != null) {
                                                        String loadBalancerDistributionInstance;
                                                        loadBalancerDistributionInstance = loadBalancerDistributionElement
                                                                .getTextContent();
                                                        inputEndpointInstance.setLoadBalancerDistribution(
                                                                loadBalancerDistributionInstance);
                                                    }

                                                    Element virtualIPNameElement = XmlUtility.getElementByTagNameNS(
                                                            inputEndpointsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "VirtualIPName");
                                                    if (virtualIPNameElement != null) {
                                                        String virtualIPNameInstance;
                                                        virtualIPNameInstance = virtualIPNameElement
                                                                .getTextContent();
                                                        inputEndpointInstance
                                                                .setVirtualIPName(virtualIPNameInstance);
                                                    }
                                                }
                                            }

                                            Element subnetNamesSequenceElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "SubnetNames");
                                            if (subnetNamesSequenceElement != null) {
                                                for (int i18 = 0; i18 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(subnetNamesSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "SubnetName")
                                                        .size(); i18 = i18 + 1) {
                                                    org.w3c.dom.Element subnetNamesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(subnetNamesSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "SubnetName")
                                                            .get(i18));
                                                    configurationSetInstance.getSubnetNames()
                                                            .add(subnetNamesElement.getTextContent());
                                                }
                                            }

                                            Element staticVirtualNetworkIPAddressElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "StaticVirtualNetworkIPAddress");
                                            if (staticVirtualNetworkIPAddressElement != null) {
                                                String staticVirtualNetworkIPAddressInstance;
                                                staticVirtualNetworkIPAddressInstance = staticVirtualNetworkIPAddressElement
                                                        .getTextContent();
                                                configurationSetInstance.setStaticVirtualNetworkIPAddress(
                                                        staticVirtualNetworkIPAddressInstance);
                                            }

                                            Element publicIPsSequenceElement2 = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "PublicIPs");
                                            if (publicIPsSequenceElement2 != null) {
                                                for (int i19 = 0; i19 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(publicIPsSequenceElement2,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "PublicIP")
                                                        .size(); i19 = i19 + 1) {
                                                    org.w3c.dom.Element publicIPsElement2 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(publicIPsSequenceElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "PublicIP")
                                                            .get(i19));
                                                    ConfigurationSet.PublicIP publicIPInstance2 = new ConfigurationSet.PublicIP();
                                                    configurationSetInstance.getPublicIPs().add(publicIPInstance2);

                                                    Element nameElement8 = XmlUtility.getElementByTagNameNS(
                                                            publicIPsElement2,
                                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                                    if (nameElement8 != null) {
                                                        String nameInstance8;
                                                        nameInstance8 = nameElement8.getTextContent();
                                                        publicIPInstance2.setName(nameInstance8);
                                                    }

                                                    Element idleTimeoutInMinutesElement4 = XmlUtility
                                                            .getElementByTagNameNS(publicIPsElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "IdleTimeoutInMinutes");
                                                    if (idleTimeoutInMinutesElement4 != null
                                                            && idleTimeoutInMinutesElement4.getTextContent() != null
                                                            && !idleTimeoutInMinutesElement4.getTextContent()
                                                                    .isEmpty()) {
                                                        int idleTimeoutInMinutesInstance4;
                                                        idleTimeoutInMinutesInstance4 = DatatypeConverter.parseInt(
                                                                idleTimeoutInMinutesElement4.getTextContent());
                                                        publicIPInstance2.setIdleTimeoutInMinutes(
                                                                idleTimeoutInMinutesInstance4);
                                                    }

                                                    Element domainNameLabelElement2 = XmlUtility
                                                            .getElementByTagNameNS(publicIPsElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "DomainNameLabel");
                                                    if (domainNameLabelElement2 != null) {
                                                        String domainNameLabelInstance2;
                                                        domainNameLabelInstance2 = domainNameLabelElement2
                                                                .getTextContent();
                                                        publicIPInstance2
                                                                .setDomainNameLabel(domainNameLabelInstance2);
                                                    }
                                                }
                                            }

                                            Element networkInterfacesSequenceElement2 = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "NetworkInterfaces");
                                            if (networkInterfacesSequenceElement2 != null) {
                                                for (int i20 = 0; i20 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(networkInterfacesSequenceElement2,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "NetworkInterface")
                                                        .size(); i20 = i20 + 1) {
                                                    org.w3c.dom.Element networkInterfacesElement2 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(
                                                                    networkInterfacesSequenceElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "NetworkInterface")
                                                            .get(i20));
                                                    NetworkInterface networkInterfaceInstance2 = new NetworkInterface();
                                                    configurationSetInstance.getNetworkInterfaces()
                                                            .add(networkInterfaceInstance2);

                                                    Element nameElement9 = XmlUtility.getElementByTagNameNS(
                                                            networkInterfacesElement2,
                                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                                    if (nameElement9 != null) {
                                                        String nameInstance9;
                                                        nameInstance9 = nameElement9.getTextContent();
                                                        networkInterfaceInstance2.setName(nameInstance9);
                                                    }

                                                    Element iPConfigurationsSequenceElement2 = XmlUtility
                                                            .getElementByTagNameNS(networkInterfacesElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "IPConfigurations");
                                                    if (iPConfigurationsSequenceElement2 != null) {
                                                        for (int i21 = 0; i21 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(
                                                                        iPConfigurationsSequenceElement2,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "IPConfiguration")
                                                                .size(); i21 = i21 + 1) {
                                                            org.w3c.dom.Element iPConfigurationsElement2 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                    .getElementsByTagNameNS(
                                                                            iPConfigurationsSequenceElement2,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "IPConfiguration")
                                                                    .get(i21));
                                                            IPConfiguration iPConfigurationInstance2 = new IPConfiguration();
                                                            networkInterfaceInstance2.getIPConfigurations()
                                                                    .add(iPConfigurationInstance2);

                                                            Element subnetNameElement2 = XmlUtility
                                                                    .getElementByTagNameNS(iPConfigurationsElement2,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "SubnetName");
                                                            if (subnetNameElement2 != null) {
                                                                String subnetNameInstance2;
                                                                subnetNameInstance2 = subnetNameElement2
                                                                        .getTextContent();
                                                                iPConfigurationInstance2
                                                                        .setSubnetName(subnetNameInstance2);
                                                            }

                                                            Element staticVirtualNetworkIPAddressElement2 = XmlUtility
                                                                    .getElementByTagNameNS(iPConfigurationsElement2,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "StaticVirtualNetworkIPAddress");
                                                            if (staticVirtualNetworkIPAddressElement2 != null) {
                                                                String staticVirtualNetworkIPAddressInstance2;
                                                                staticVirtualNetworkIPAddressInstance2 = staticVirtualNetworkIPAddressElement2
                                                                        .getTextContent();
                                                                iPConfigurationInstance2
                                                                        .setStaticVirtualNetworkIPAddress(
                                                                                staticVirtualNetworkIPAddressInstance2);
                                                            }
                                                        }
                                                    }

                                                    Element networkSecurityGroupElement = XmlUtility
                                                            .getElementByTagNameNS(networkInterfacesElement2,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "NetworkSecurityGroup");
                                                    if (networkSecurityGroupElement != null) {
                                                        String networkSecurityGroupInstance;
                                                        networkSecurityGroupInstance = networkSecurityGroupElement
                                                                .getTextContent();
                                                        networkInterfaceInstance2.setNetworkSecurityGroup(
                                                                networkSecurityGroupInstance);
                                                    }

                                                    Element iPForwardingElement = XmlUtility.getElementByTagNameNS(
                                                            networkInterfacesElement2,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "IPForwarding");
                                                    if (iPForwardingElement != null) {
                                                        String iPForwardingInstance;
                                                        iPForwardingInstance = iPForwardingElement.getTextContent();
                                                        networkInterfaceInstance2
                                                                .setIPForwarding(iPForwardingInstance);
                                                    }
                                                }
                                            }

                                            Element networkSecurityGroupElement2 = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "NetworkSecurityGroup");
                                            if (networkSecurityGroupElement2 != null) {
                                                String networkSecurityGroupInstance2;
                                                networkSecurityGroupInstance2 = networkSecurityGroupElement2
                                                        .getTextContent();
                                                configurationSetInstance
                                                        .setNetworkSecurityGroup(networkSecurityGroupInstance2);
                                            }

                                            Element iPForwardingElement2 = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "IPForwarding");
                                            if (iPForwardingElement2 != null) {
                                                String iPForwardingInstance2;
                                                iPForwardingInstance2 = iPForwardingElement2.getTextContent();
                                                configurationSetInstance.setIPForwarding(iPForwardingInstance2);
                                            }

                                            Element computerNameElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "ComputerName");
                                            if (computerNameElement != null) {
                                                String computerNameInstance;
                                                computerNameInstance = computerNameElement.getTextContent();
                                                configurationSetInstance.setComputerName(computerNameInstance);
                                            }

                                            Element adminPasswordElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "AdminPassword");
                                            if (adminPasswordElement != null) {
                                                String adminPasswordInstance;
                                                adminPasswordInstance = adminPasswordElement.getTextContent();
                                                configurationSetInstance.setAdminPassword(adminPasswordInstance);
                                            }

                                            Element resetPasswordOnFirstLogonElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "ResetPasswordOnFirstLogon");
                                            if (resetPasswordOnFirstLogonElement != null
                                                    && resetPasswordOnFirstLogonElement.getTextContent() != null
                                                    && !resetPasswordOnFirstLogonElement.getTextContent()
                                                            .isEmpty()) {
                                                boolean resetPasswordOnFirstLogonInstance;
                                                resetPasswordOnFirstLogonInstance = DatatypeConverter
                                                        .parseBoolean(resetPasswordOnFirstLogonElement
                                                                .getTextContent().toLowerCase());
                                                configurationSetInstance.setResetPasswordOnFirstLogon(
                                                        resetPasswordOnFirstLogonInstance);
                                            }

                                            Element enableAutomaticUpdatesElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "EnableAutomaticUpdates");
                                            if (enableAutomaticUpdatesElement != null
                                                    && enableAutomaticUpdatesElement.getTextContent() != null
                                                    && !enableAutomaticUpdatesElement.getTextContent().isEmpty()) {
                                                boolean enableAutomaticUpdatesInstance;
                                                enableAutomaticUpdatesInstance = DatatypeConverter
                                                        .parseBoolean(enableAutomaticUpdatesElement.getTextContent()
                                                                .toLowerCase());
                                                configurationSetInstance
                                                        .setEnableAutomaticUpdates(enableAutomaticUpdatesInstance);
                                            }

                                            Element timeZoneElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "TimeZone");
                                            if (timeZoneElement != null) {
                                                String timeZoneInstance;
                                                timeZoneInstance = timeZoneElement.getTextContent();
                                                configurationSetInstance.setTimeZone(timeZoneInstance);
                                            }

                                            Element domainJoinElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "DomainJoin");
                                            if (domainJoinElement != null) {
                                                DomainJoinSettings domainJoinInstance = new DomainJoinSettings();
                                                configurationSetInstance.setDomainJoin(domainJoinInstance);

                                                Element credentialsElement = XmlUtility.getElementByTagNameNS(
                                                        domainJoinElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Credentials");
                                                if (credentialsElement != null) {
                                                    DomainJoinCredentials credentialsInstance = new DomainJoinCredentials();
                                                    domainJoinInstance.setCredentials(credentialsInstance);

                                                    Element domainElement = XmlUtility.getElementByTagNameNS(
                                                            credentialsElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Domain");
                                                    if (domainElement != null) {
                                                        String domainInstance;
                                                        domainInstance = domainElement.getTextContent();
                                                        credentialsInstance.setDomain(domainInstance);
                                                    }

                                                    Element usernameElement = XmlUtility.getElementByTagNameNS(
                                                            credentialsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "Username");
                                                    if (usernameElement != null) {
                                                        String usernameInstance;
                                                        usernameInstance = usernameElement.getTextContent();
                                                        credentialsInstance.setUserName(usernameInstance);
                                                    }

                                                    Element passwordElement = XmlUtility.getElementByTagNameNS(
                                                            credentialsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "Password");
                                                    if (passwordElement != null) {
                                                        String passwordInstance;
                                                        passwordInstance = passwordElement.getTextContent();
                                                        credentialsInstance.setPassword(passwordInstance);
                                                    }
                                                }

                                                Element joinDomainElement = XmlUtility.getElementByTagNameNS(
                                                        domainJoinElement,
                                                        "http://schemas.microsoft.com/windowsazure", "JoinDomain");
                                                if (joinDomainElement != null) {
                                                    String joinDomainInstance;
                                                    joinDomainInstance = joinDomainElement.getTextContent();
                                                    domainJoinInstance.setDomainToJoin(joinDomainInstance);
                                                }

                                                Element machineObjectOUElement = XmlUtility.getElementByTagNameNS(
                                                        domainJoinElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "MachineObjectOU");
                                                if (machineObjectOUElement != null) {
                                                    String machineObjectOUInstance;
                                                    machineObjectOUInstance = machineObjectOUElement
                                                            .getTextContent();
                                                    domainJoinInstance
                                                            .setLdapMachineObjectOU(machineObjectOUInstance);
                                                }

                                                Element provisioningElement = XmlUtility.getElementByTagNameNS(
                                                        domainJoinElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "Provisioning");
                                                if (provisioningElement != null) {
                                                    DomainJoinProvisioning provisioningInstance = new DomainJoinProvisioning();
                                                    domainJoinInstance.setProvisioning(provisioningInstance);

                                                    Element accountDataElement = XmlUtility.getElementByTagNameNS(
                                                            provisioningElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "AccountData");
                                                    if (accountDataElement != null) {
                                                        String accountDataInstance;
                                                        accountDataInstance = accountDataElement.getTextContent();
                                                        provisioningInstance.setAccountData(accountDataInstance);
                                                    }
                                                }
                                            }

                                            Element storedCertificateSettingsSequenceElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "StoredCertificateSettings");
                                            if (storedCertificateSettingsSequenceElement != null) {
                                                for (int i22 = 0; i22 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(
                                                                storedCertificateSettingsSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "CertificateSetting")
                                                        .size(); i22 = i22 + 1) {
                                                    org.w3c.dom.Element storedCertificateSettingsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(
                                                                    storedCertificateSettingsSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "CertificateSetting")
                                                            .get(i22));
                                                    StoredCertificateSettings certificateSettingInstance = new StoredCertificateSettings();
                                                    configurationSetInstance.getStoredCertificateSettings()
                                                            .add(certificateSettingInstance);

                                                    Element storeLocationElement = XmlUtility.getElementByTagNameNS(
                                                            storedCertificateSettingsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "StoreLocation");
                                                    if (storeLocationElement != null) {
                                                    }

                                                    Element storeNameElement = XmlUtility.getElementByTagNameNS(
                                                            storedCertificateSettingsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "StoreName");
                                                    if (storeNameElement != null) {
                                                        String storeNameInstance;
                                                        storeNameInstance = storeNameElement.getTextContent();
                                                        certificateSettingInstance.setStoreName(storeNameInstance);
                                                    }

                                                    Element thumbprintElement = XmlUtility.getElementByTagNameNS(
                                                            storedCertificateSettingsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "Thumbprint");
                                                    if (thumbprintElement != null) {
                                                        String thumbprintInstance;
                                                        thumbprintInstance = thumbprintElement.getTextContent();
                                                        certificateSettingInstance
                                                                .setThumbprint(thumbprintInstance);
                                                    }
                                                }
                                            }

                                            Element winRMElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "WinRM");
                                            if (winRMElement != null) {
                                                WindowsRemoteManagementSettings winRMInstance = new WindowsRemoteManagementSettings();
                                                configurationSetInstance.setWindowsRemoteManagement(winRMInstance);

                                                Element listenersSequenceElement = XmlUtility.getElementByTagNameNS(
                                                        winRMElement, "http://schemas.microsoft.com/windowsazure",
                                                        "Listeners");
                                                if (listenersSequenceElement != null) {
                                                    for (int i23 = 0; i23 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(listenersSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "Listener")
                                                            .size(); i23 = i23 + 1) {
                                                        org.w3c.dom.Element listenersElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(listenersSequenceElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Listener")
                                                                .get(i23));
                                                        WindowsRemoteManagementListener listenerInstance = new WindowsRemoteManagementListener();
                                                        winRMInstance.getListeners().add(listenerInstance);

                                                        Element protocolElement4 = XmlUtility.getElementByTagNameNS(
                                                                listenersElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Protocol");
                                                        if (protocolElement4 != null
                                                                && protocolElement4.getTextContent() != null
                                                                && !protocolElement4.getTextContent().isEmpty()) {
                                                            VirtualMachineWindowsRemoteManagementListenerType protocolInstance4;
                                                            protocolInstance4 = VirtualMachineWindowsRemoteManagementListenerType
                                                                    .valueOf(protocolElement4.getTextContent());
                                                            listenerInstance.setListenerType(protocolInstance4);
                                                        }

                                                        Element certificateThumbprintElement = XmlUtility
                                                                .getElementByTagNameNS(listenersElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "CertificateThumbprint");
                                                        if (certificateThumbprintElement != null) {
                                                            String certificateThumbprintInstance;
                                                            certificateThumbprintInstance = certificateThumbprintElement
                                                                    .getTextContent();
                                                            listenerInstance.setCertificateThumbprint(
                                                                    certificateThumbprintInstance);
                                                        }
                                                    }
                                                }
                                            }

                                            Element adminUsernameElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "AdminUsername");
                                            if (adminUsernameElement != null) {
                                                String adminUsernameInstance;
                                                adminUsernameInstance = adminUsernameElement.getTextContent();
                                                configurationSetInstance.setAdminUserName(adminUsernameInstance);
                                            }

                                            Element additionalUnattendContentElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "AdditionalUnattendContent");
                                            if (additionalUnattendContentElement != null) {
                                                AdditionalUnattendContentSettings additionalUnattendContentInstance = new AdditionalUnattendContentSettings();
                                                configurationSetInstance.setAdditionalUnattendContent(
                                                        additionalUnattendContentInstance);

                                                Element passesSequenceElement = XmlUtility.getElementByTagNameNS(
                                                        additionalUnattendContentElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Passes");
                                                if (passesSequenceElement != null) {
                                                    for (int i24 = 0; i24 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(passesSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "UnattendPass")
                                                            .size(); i24 = i24 + 1) {
                                                        org.w3c.dom.Element passesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(passesSequenceElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "UnattendPass")
                                                                .get(i24));
                                                        UnattendPassSettings unattendPassInstance = new UnattendPassSettings();
                                                        additionalUnattendContentInstance.getUnattendPasses()
                                                                .add(unattendPassInstance);

                                                        Element passNameElement = XmlUtility.getElementByTagNameNS(
                                                                passesElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "PassName");
                                                        if (passNameElement != null) {
                                                            String passNameInstance;
                                                            passNameInstance = passNameElement.getTextContent();
                                                            unattendPassInstance.setPassName(passNameInstance);
                                                        }

                                                        Element componentsSequenceElement = XmlUtility
                                                                .getElementByTagNameNS(passesElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Components");
                                                        if (componentsSequenceElement != null) {
                                                            for (int i25 = 0; i25 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                                    .getElementsByTagNameNS(
                                                                            componentsSequenceElement,
                                                                            "http://schemas.microsoft.com/windowsazure",
                                                                            "UnattendComponent")
                                                                    .size(); i25 = i25 + 1) {
                                                                org.w3c.dom.Element componentsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                        .getElementsByTagNameNS(
                                                                                componentsSequenceElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "UnattendComponent")
                                                                        .get(i25));
                                                                UnattendComponent unattendComponentInstance = new UnattendComponent();
                                                                unattendPassInstance.getUnattendComponents()
                                                                        .add(unattendComponentInstance);

                                                                Element componentNameElement = XmlUtility
                                                                        .getElementByTagNameNS(componentsElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "ComponentName");
                                                                if (componentNameElement != null) {
                                                                    String componentNameInstance;
                                                                    componentNameInstance = componentNameElement
                                                                            .getTextContent();
                                                                    unattendComponentInstance.setComponentName(
                                                                            componentNameInstance);
                                                                }

                                                                Element componentSettingsSequenceElement = XmlUtility
                                                                        .getElementByTagNameNS(componentsElement,
                                                                                "http://schemas.microsoft.com/windowsazure",
                                                                                "ComponentSettings");
                                                                if (componentSettingsSequenceElement != null) {
                                                                    for (int i26 = 0; i26 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                                            .getElementsByTagNameNS(
                                                                                    componentSettingsSequenceElement,
                                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                                    "ComponentSetting")
                                                                            .size(); i26 = i26 + 1) {
                                                                        org.w3c.dom.Element componentSettingsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                                .getElementsByTagNameNS(
                                                                                        componentSettingsSequenceElement,
                                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                                        "ComponentSetting")
                                                                                .get(i26));
                                                                        ComponentSetting componentSettingInstance = new ComponentSetting();
                                                                        unattendComponentInstance
                                                                                .getUnattendComponentSettings()
                                                                                .add(componentSettingInstance);

                                                                        Element settingNameElement = XmlUtility
                                                                                .getElementByTagNameNS(
                                                                                        componentSettingsElement,
                                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                                        "SettingName");
                                                                        if (settingNameElement != null) {
                                                                            String settingNameInstance;
                                                                            settingNameInstance = settingNameElement
                                                                                    .getTextContent();
                                                                            componentSettingInstance.setSettingName(
                                                                                    settingNameInstance);
                                                                        }

                                                                        Element contentElement = XmlUtility
                                                                                .getElementByTagNameNS(
                                                                                        componentSettingsElement,
                                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                                        "Content");
                                                                        if (contentElement != null) {
                                                                            String contentInstance;
                                                                            contentInstance = contentElement
                                                                                    .getTextContent() != null
                                                                                            ? new String(Base64
                                                                                                    .decode(contentElement
                                                                                                            .getTextContent()))
                                                                                            : null;
                                                                            componentSettingInstance
                                                                                    .setContent(contentInstance);
                                                                        }
                                                                    }
                                                                }
                                                            }
                                                        }
                                                    }
                                                }
                                            }

                                            Element hostNameElement2 = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "HostName");
                                            if (hostNameElement2 != null) {
                                                String hostNameInstance2;
                                                hostNameInstance2 = hostNameElement2.getTextContent();
                                                configurationSetInstance.setHostName(hostNameInstance2);
                                            }

                                            Element userNameElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "UserName");
                                            if (userNameElement != null) {
                                                String userNameInstance;
                                                userNameInstance = userNameElement.getTextContent();
                                                configurationSetInstance.setUserName(userNameInstance);
                                            }

                                            Element userPasswordElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "UserPassword");
                                            if (userPasswordElement != null) {
                                                String userPasswordInstance;
                                                userPasswordInstance = userPasswordElement.getTextContent();
                                                configurationSetInstance.setUserPassword(userPasswordInstance);
                                            }

                                            Element disableSshPasswordAuthenticationElement = XmlUtility
                                                    .getElementByTagNameNS(configurationSetsElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "DisableSshPasswordAuthentication");
                                            if (disableSshPasswordAuthenticationElement != null
                                                    && disableSshPasswordAuthenticationElement
                                                            .getTextContent() != null
                                                    && !disableSshPasswordAuthenticationElement.getTextContent()
                                                            .isEmpty()) {
                                                boolean disableSshPasswordAuthenticationInstance;
                                                disableSshPasswordAuthenticationInstance = DatatypeConverter
                                                        .parseBoolean(disableSshPasswordAuthenticationElement
                                                                .getTextContent().toLowerCase());
                                                configurationSetInstance.setDisableSshPasswordAuthentication(
                                                        disableSshPasswordAuthenticationInstance);
                                            }

                                            Element sSHElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "SSH");
                                            if (sSHElement != null) {
                                                SshSettings sSHInstance = new SshSettings();
                                                configurationSetInstance.setSshSettings(sSHInstance);

                                                Element publicKeysSequenceElement = XmlUtility
                                                        .getElementByTagNameNS(sSHElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "PublicKeys");
                                                if (publicKeysSequenceElement != null) {
                                                    for (int i27 = 0; i27 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(publicKeysSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "PublicKey")
                                                            .size(); i27 = i27 + 1) {
                                                        org.w3c.dom.Element publicKeysElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(publicKeysSequenceElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "PublicKey")
                                                                .get(i27));
                                                        SshSettingPublicKey publicKeyInstance = new SshSettingPublicKey();
                                                        sSHInstance.getPublicKeys().add(publicKeyInstance);

                                                        Element fingerprintElement = XmlUtility
                                                                .getElementByTagNameNS(publicKeysElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Fingerprint");
                                                        if (fingerprintElement != null) {
                                                            String fingerprintInstance;
                                                            fingerprintInstance = fingerprintElement
                                                                    .getTextContent();
                                                            publicKeyInstance.setFingerprint(fingerprintInstance);
                                                        }

                                                        Element pathElement2 = XmlUtility.getElementByTagNameNS(
                                                                publicKeysElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Path");
                                                        if (pathElement2 != null) {
                                                            String pathInstance2;
                                                            pathInstance2 = pathElement2.getTextContent();
                                                            publicKeyInstance.setPath(pathInstance2);
                                                        }
                                                    }
                                                }

                                                Element keyPairsSequenceElement = XmlUtility.getElementByTagNameNS(
                                                        sSHElement, "http://schemas.microsoft.com/windowsazure",
                                                        "KeyPairs");
                                                if (keyPairsSequenceElement != null) {
                                                    for (int i28 = 0; i28 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(keyPairsSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "KeyPair")
                                                            .size(); i28 = i28 + 1) {
                                                        org.w3c.dom.Element keyPairsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                                .getElementsByTagNameNS(keyPairsSequenceElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "KeyPair")
                                                                .get(i28));
                                                        SshSettingKeyPair keyPairInstance = new SshSettingKeyPair();
                                                        sSHInstance.getKeyPairs().add(keyPairInstance);

                                                        Element fingerprintElement2 = XmlUtility
                                                                .getElementByTagNameNS(keyPairsElement,
                                                                        "http://schemas.microsoft.com/windowsazure",
                                                                        "Fingerprint");
                                                        if (fingerprintElement2 != null) {
                                                            String fingerprintInstance2;
                                                            fingerprintInstance2 = fingerprintElement2
                                                                    .getTextContent();
                                                            keyPairInstance.setFingerprint(fingerprintInstance2);
                                                        }

                                                        Element pathElement3 = XmlUtility.getElementByTagNameNS(
                                                                keyPairsElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "Path");
                                                        if (pathElement3 != null) {
                                                            String pathInstance3;
                                                            pathInstance3 = pathElement3.getTextContent();
                                                            keyPairInstance.setPath(pathInstance3);
                                                        }
                                                    }
                                                }
                                            }

                                            Element customDataElement = XmlUtility.getElementByTagNameNS(
                                                    configurationSetsElement,
                                                    "http://schemas.microsoft.com/windowsazure", "CustomData");
                                            if (customDataElement != null) {
                                                String customDataInstance;
                                                customDataInstance = customDataElement.getTextContent();
                                                configurationSetInstance.setCustomData(customDataInstance);
                                            }
                                        }
                                    }

                                    Element resourceExtensionReferencesSequenceElement = XmlUtility
                                            .getElementByTagNameNS(roleListElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "ResourceExtensionReferences");
                                    if (resourceExtensionReferencesSequenceElement != null) {
                                        for (int i29 = 0; i29 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(resourceExtensionReferencesSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "ResourceExtensionReference")
                                                .size(); i29 = i29 + 1) {
                                            org.w3c.dom.Element resourceExtensionReferencesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(
                                                            resourceExtensionReferencesSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "ResourceExtensionReference")
                                                    .get(i29));
                                            ResourceExtensionReference resourceExtensionReferenceInstance = new ResourceExtensionReference();
                                            roleInstance.getResourceExtensionReferences()
                                                    .add(resourceExtensionReferenceInstance);

                                            Element referenceNameElement = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionReferencesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "ReferenceName");
                                            if (referenceNameElement != null) {
                                                String referenceNameInstance;
                                                referenceNameInstance = referenceNameElement.getTextContent();
                                                resourceExtensionReferenceInstance
                                                        .setReferenceName(referenceNameInstance);
                                            }

                                            Element publisherElement = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionReferencesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Publisher");
                                            if (publisherElement != null) {
                                                String publisherInstance;
                                                publisherInstance = publisherElement.getTextContent();
                                                resourceExtensionReferenceInstance.setPublisher(publisherInstance);
                                            }

                                            Element nameElement10 = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionReferencesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Name");
                                            if (nameElement10 != null) {
                                                String nameInstance10;
                                                nameInstance10 = nameElement10.getTextContent();
                                                resourceExtensionReferenceInstance.setName(nameInstance10);
                                            }

                                            Element versionElement2 = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionReferencesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Version");
                                            if (versionElement2 != null) {
                                                String versionInstance2;
                                                versionInstance2 = versionElement2.getTextContent();
                                                resourceExtensionReferenceInstance.setVersion(versionInstance2);
                                            }

                                            Element resourceExtensionParameterValuesSequenceElement = XmlUtility
                                                    .getElementByTagNameNS(resourceExtensionReferencesElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "ResourceExtensionParameterValues");
                                            if (resourceExtensionParameterValuesSequenceElement != null) {
                                                for (int i30 = 0; i30 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(
                                                                resourceExtensionParameterValuesSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "ResourceExtensionParameterValue")
                                                        .size(); i30 = i30 + 1) {
                                                    org.w3c.dom.Element resourceExtensionParameterValuesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                            .getElementsByTagNameNS(
                                                                    resourceExtensionParameterValuesSequenceElement,
                                                                    "http://schemas.microsoft.com/windowsazure",
                                                                    "ResourceExtensionParameterValue")
                                                            .get(i30));
                                                    ResourceExtensionParameterValue resourceExtensionParameterValueInstance = new ResourceExtensionParameterValue();
                                                    resourceExtensionReferenceInstance
                                                            .getResourceExtensionParameterValues()
                                                            .add(resourceExtensionParameterValueInstance);

                                                    Element keyElement = XmlUtility.getElementByTagNameNS(
                                                            resourceExtensionParameterValuesElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Key");
                                                    if (keyElement != null) {
                                                        String keyInstance;
                                                        keyInstance = keyElement.getTextContent();
                                                        resourceExtensionParameterValueInstance.setKey(keyInstance);
                                                    }

                                                    Element valueElement = XmlUtility.getElementByTagNameNS(
                                                            resourceExtensionParameterValuesElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Value");
                                                    if (valueElement != null) {
                                                        String valueInstance;
                                                        valueInstance = valueElement.getTextContent() != null
                                                                ? new String(Base64
                                                                        .decode(valueElement.getTextContent()))
                                                                : null;
                                                        resourceExtensionParameterValueInstance
                                                                .setValue(valueInstance);
                                                    }

                                                    Element typeElement = XmlUtility.getElementByTagNameNS(
                                                            resourceExtensionParameterValuesElement,
                                                            "http://schemas.microsoft.com/windowsazure", "Type");
                                                    if (typeElement != null) {
                                                        String typeInstance;
                                                        typeInstance = typeElement.getTextContent();
                                                        resourceExtensionParameterValueInstance
                                                                .setType(typeInstance);
                                                    }
                                                }
                                            }

                                            Element stateElement = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionReferencesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "State");
                                            if (stateElement != null) {
                                                String stateInstance;
                                                stateInstance = stateElement.getTextContent();
                                                resourceExtensionReferenceInstance.setState(stateInstance);
                                            }

                                            Element forceUpdateElement = XmlUtility.getElementByTagNameNS(
                                                    resourceExtensionReferencesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "ForceUpdate");
                                            if (forceUpdateElement != null
                                                    && forceUpdateElement.getTextContent() != null
                                                    && !forceUpdateElement.getTextContent().isEmpty()) {
                                                boolean forceUpdateInstance;
                                                forceUpdateInstance = DatatypeConverter.parseBoolean(
                                                        forceUpdateElement.getTextContent().toLowerCase());
                                                resourceExtensionReferenceInstance
                                                        .setForceUpdate(forceUpdateInstance);
                                            }
                                        }
                                    }

                                    Element vMImageNameElement = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "VMImageName");
                                    if (vMImageNameElement != null) {
                                        String vMImageNameInstance;
                                        vMImageNameInstance = vMImageNameElement.getTextContent();
                                        roleInstance.setVMImageName(vMImageNameInstance);
                                    }

                                    Element mediaLocationElement = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "MediaLocation");
                                    if (mediaLocationElement != null) {
                                        URI mediaLocationInstance;
                                        mediaLocationInstance = new URI(mediaLocationElement.getTextContent());
                                        roleInstance.setMediaLocation(mediaLocationInstance);
                                    }

                                    Element availabilitySetNameElement = XmlUtility.getElementByTagNameNS(
                                            roleListElement, "http://schemas.microsoft.com/windowsazure",
                                            "AvailabilitySetName");
                                    if (availabilitySetNameElement != null) {
                                        String availabilitySetNameInstance;
                                        availabilitySetNameInstance = availabilitySetNameElement.getTextContent();
                                        roleInstance.setAvailabilitySetName(availabilitySetNameInstance);
                                    }

                                    Element dataVirtualHardDisksSequenceElement = XmlUtility.getElementByTagNameNS(
                                            roleListElement, "http://schemas.microsoft.com/windowsazure",
                                            "DataVirtualHardDisks");
                                    if (dataVirtualHardDisksSequenceElement != null) {
                                        for (int i31 = 0; i31 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(dataVirtualHardDisksSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "DataVirtualHardDisk")
                                                .size(); i31 = i31 + 1) {
                                            org.w3c.dom.Element dataVirtualHardDisksElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(dataVirtualHardDisksSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "DataVirtualHardDisk")
                                                    .get(i31));
                                            DataVirtualHardDisk dataVirtualHardDiskInstance = new DataVirtualHardDisk();
                                            roleInstance.getDataVirtualHardDisks().add(dataVirtualHardDiskInstance);

                                            Element hostCachingElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "HostCaching");
                                            if (hostCachingElement != null) {
                                                String hostCachingInstance;
                                                hostCachingInstance = hostCachingElement.getTextContent();
                                                dataVirtualHardDiskInstance.setHostCaching(hostCachingInstance);
                                            }

                                            Element diskLabelElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "DiskLabel");
                                            if (diskLabelElement != null) {
                                                String diskLabelInstance;
                                                diskLabelInstance = diskLabelElement.getTextContent();
                                                dataVirtualHardDiskInstance.setLabel(diskLabelInstance);
                                            }

                                            Element diskNameElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "DiskName");
                                            if (diskNameElement != null) {
                                                String diskNameInstance;
                                                diskNameInstance = diskNameElement.getTextContent();
                                                dataVirtualHardDiskInstance.setName(diskNameInstance);
                                            }

                                            Element lunElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Lun");
                                            if (lunElement != null && lunElement.getTextContent() != null
                                                    && !lunElement.getTextContent().isEmpty()) {
                                                int lunInstance;
                                                lunInstance = DatatypeConverter
                                                        .parseInt(lunElement.getTextContent());
                                                dataVirtualHardDiskInstance.setLogicalUnitNumber(lunInstance);
                                            }

                                            Element logicalDiskSizeInGBElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "LogicalDiskSizeInGB");
                                            if (logicalDiskSizeInGBElement != null
                                                    && logicalDiskSizeInGBElement.getTextContent() != null
                                                    && !logicalDiskSizeInGBElement.getTextContent().isEmpty()) {
                                                int logicalDiskSizeInGBInstance;
                                                logicalDiskSizeInGBInstance = DatatypeConverter
                                                        .parseInt(logicalDiskSizeInGBElement.getTextContent());
                                                dataVirtualHardDiskInstance
                                                        .setLogicalDiskSizeInGB(logicalDiskSizeInGBInstance);
                                            }

                                            Element mediaLinkElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "MediaLink");
                                            if (mediaLinkElement != null) {
                                                URI mediaLinkInstance;
                                                mediaLinkInstance = new URI(mediaLinkElement.getTextContent());
                                                dataVirtualHardDiskInstance.setMediaLink(mediaLinkInstance);
                                            }

                                            Element sourceMediaLinkElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "SourceMediaLink");
                                            if (sourceMediaLinkElement != null) {
                                                URI sourceMediaLinkInstance;
                                                sourceMediaLinkInstance = new URI(
                                                        sourceMediaLinkElement.getTextContent());
                                                dataVirtualHardDiskInstance
                                                        .setSourceMediaLink(sourceMediaLinkInstance);
                                            }

                                            Element iOTypeElement = XmlUtility.getElementByTagNameNS(
                                                    dataVirtualHardDisksElement,
                                                    "http://schemas.microsoft.com/windowsazure", "IOType");
                                            if (iOTypeElement != null) {
                                                String iOTypeInstance;
                                                iOTypeInstance = iOTypeElement.getTextContent();
                                                dataVirtualHardDiskInstance.setIOType(iOTypeInstance);
                                            }
                                        }
                                    }

                                    Element labelElement2 = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "Label");
                                    if (labelElement2 != null) {
                                        String labelInstance2;
                                        labelInstance2 = labelElement2.getTextContent();
                                        roleInstance.setLabel(labelInstance2);
                                    }

                                    Element oSVirtualHardDiskElement = XmlUtility.getElementByTagNameNS(
                                            roleListElement, "http://schemas.microsoft.com/windowsazure",
                                            "OSVirtualHardDisk");
                                    if (oSVirtualHardDiskElement != null) {
                                        OSVirtualHardDisk oSVirtualHardDiskInstance = new OSVirtualHardDisk();
                                        roleInstance.setOSVirtualHardDisk(oSVirtualHardDiskInstance);

                                        Element hostCachingElement2 = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "HostCaching");
                                        if (hostCachingElement2 != null) {
                                            String hostCachingInstance2;
                                            hostCachingInstance2 = hostCachingElement2.getTextContent();
                                            oSVirtualHardDiskInstance.setHostCaching(hostCachingInstance2);
                                        }

                                        Element diskLabelElement2 = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "DiskLabel");
                                        if (diskLabelElement2 != null) {
                                            String diskLabelInstance2;
                                            diskLabelInstance2 = diskLabelElement2.getTextContent();
                                            oSVirtualHardDiskInstance.setLabel(diskLabelInstance2);
                                        }

                                        Element diskNameElement2 = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "DiskName");
                                        if (diskNameElement2 != null) {
                                            String diskNameInstance2;
                                            diskNameInstance2 = diskNameElement2.getTextContent();
                                            oSVirtualHardDiskInstance.setName(diskNameInstance2);
                                        }

                                        Element mediaLinkElement2 = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "MediaLink");
                                        if (mediaLinkElement2 != null) {
                                            URI mediaLinkInstance2;
                                            mediaLinkInstance2 = new URI(mediaLinkElement2.getTextContent());
                                            oSVirtualHardDiskInstance.setMediaLink(mediaLinkInstance2);
                                        }

                                        Element sourceImageNameElement = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "SourceImageName");
                                        if (sourceImageNameElement != null) {
                                            String sourceImageNameInstance;
                                            sourceImageNameInstance = sourceImageNameElement.getTextContent();
                                            oSVirtualHardDiskInstance.setSourceImageName(sourceImageNameInstance);
                                        }

                                        Element osElement = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "OS");
                                        if (osElement != null) {
                                            String osInstance;
                                            osInstance = osElement.getTextContent();
                                            oSVirtualHardDiskInstance.setOperatingSystem(osInstance);
                                        }

                                        Element remoteSourceImageLinkElement = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure",
                                                "RemoteSourceImageLink");
                                        if (remoteSourceImageLinkElement != null) {
                                            URI remoteSourceImageLinkInstance;
                                            remoteSourceImageLinkInstance = new URI(
                                                    remoteSourceImageLinkElement.getTextContent());
                                            oSVirtualHardDiskInstance
                                                    .setRemoteSourceImageLink(remoteSourceImageLinkInstance);
                                        }

                                        Element iOTypeElement2 = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "IOType");
                                        if (iOTypeElement2 != null) {
                                            String iOTypeInstance2;
                                            iOTypeInstance2 = iOTypeElement2.getTextContent();
                                            oSVirtualHardDiskInstance.setIOType(iOTypeInstance2);
                                        }

                                        Element resizedSizeInGBElement = XmlUtility.getElementByTagNameNS(
                                                oSVirtualHardDiskElement,
                                                "http://schemas.microsoft.com/windowsazure", "ResizedSizeInGB");
                                        if (resizedSizeInGBElement != null
                                                && resizedSizeInGBElement.getTextContent() != null
                                                && !resizedSizeInGBElement.getTextContent().isEmpty()) {
                                            int resizedSizeInGBInstance;
                                            resizedSizeInGBInstance = DatatypeConverter
                                                    .parseInt(resizedSizeInGBElement.getTextContent());
                                            oSVirtualHardDiskInstance.setResizedSizeInGB(resizedSizeInGBInstance);
                                        }
                                    }

                                    Element roleSizeElement = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleSize");
                                    if (roleSizeElement != null) {
                                        String roleSizeInstance;
                                        roleSizeInstance = roleSizeElement.getTextContent();
                                        roleInstance.setRoleSize(roleSizeInstance);
                                    }

                                    Element defaultWinRmCertificateThumbprintElement = XmlUtility
                                            .getElementByTagNameNS(roleListElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "DefaultWinRmCertificateThumbprint");
                                    if (defaultWinRmCertificateThumbprintElement != null) {
                                        String defaultWinRmCertificateThumbprintInstance;
                                        defaultWinRmCertificateThumbprintInstance = defaultWinRmCertificateThumbprintElement
                                                .getTextContent();
                                        roleInstance.setDefaultWinRmCertificateThumbprint(
                                                defaultWinRmCertificateThumbprintInstance);
                                    }

                                    Element provisionGuestAgentElement = XmlUtility.getElementByTagNameNS(
                                            roleListElement, "http://schemas.microsoft.com/windowsazure",
                                            "ProvisionGuestAgent");
                                    if (provisionGuestAgentElement != null
                                            && provisionGuestAgentElement.getTextContent() != null
                                            && !provisionGuestAgentElement.getTextContent().isEmpty()) {
                                        boolean provisionGuestAgentInstance;
                                        provisionGuestAgentInstance = DatatypeConverter.parseBoolean(
                                                provisionGuestAgentElement.getTextContent().toLowerCase());
                                        roleInstance.setProvisionGuestAgent(provisionGuestAgentInstance);
                                    }

                                    Element vMImageInputElement = XmlUtility.getElementByTagNameNS(roleListElement,
                                            "http://schemas.microsoft.com/windowsazure", "VMImageInput");
                                    if (vMImageInputElement != null) {
                                        VMImageInput vMImageInputInstance = new VMImageInput();
                                        roleInstance.setVMImageInput(vMImageInputInstance);

                                        Element oSDiskConfigurationElement = XmlUtility.getElementByTagNameNS(
                                                vMImageInputElement, "http://schemas.microsoft.com/windowsazure",
                                                "OSDiskConfiguration");
                                        if (oSDiskConfigurationElement != null) {
                                            OSDiskConfiguration oSDiskConfigurationInstance = new OSDiskConfiguration();
                                            vMImageInputInstance
                                                    .setOSDiskConfiguration(oSDiskConfigurationInstance);

                                            Element resizedSizeInGBElement2 = XmlUtility.getElementByTagNameNS(
                                                    oSDiskConfigurationElement,
                                                    "http://schemas.microsoft.com/windowsazure", "ResizedSizeInGB");
                                            if (resizedSizeInGBElement2 != null
                                                    && resizedSizeInGBElement2.getTextContent() != null
                                                    && !resizedSizeInGBElement2.getTextContent().isEmpty()) {
                                                int resizedSizeInGBInstance2;
                                                resizedSizeInGBInstance2 = DatatypeConverter
                                                        .parseInt(resizedSizeInGBElement2.getTextContent());
                                                oSDiskConfigurationInstance
                                                        .setResizedSizeInGB(resizedSizeInGBInstance2);
                                            }
                                        }

                                        Element dataDiskConfigurationsSequenceElement = XmlUtility
                                                .getElementByTagNameNS(vMImageInputElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "DataDiskConfigurations");
                                        if (dataDiskConfigurationsSequenceElement != null) {
                                            for (int i32 = 0; i32 < com.microsoft.windowsazure.core.utils.XmlUtility
                                                    .getElementsByTagNameNS(dataDiskConfigurationsSequenceElement,
                                                            "http://schemas.microsoft.com/windowsazure",
                                                            "DataDiskConfiguration")
                                                    .size(); i32 = i32 + 1) {
                                                org.w3c.dom.Element dataDiskConfigurationsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                        .getElementsByTagNameNS(
                                                                dataDiskConfigurationsSequenceElement,
                                                                "http://schemas.microsoft.com/windowsazure",
                                                                "DataDiskConfiguration")
                                                        .get(i32));
                                                DataDiskConfiguration dataDiskConfigurationInstance = new DataDiskConfiguration();
                                                vMImageInputInstance.getDataDiskConfigurations()
                                                        .add(dataDiskConfigurationInstance);

                                                Element nameElement11 = XmlUtility.getElementByTagNameNS(
                                                        dataDiskConfigurationsElement,
                                                        "http://schemas.microsoft.com/windowsazure", "Name");
                                                if (nameElement11 != null) {
                                                    String nameInstance11;
                                                    nameInstance11 = nameElement11.getTextContent();
                                                    dataDiskConfigurationInstance.setDiskName(nameInstance11);
                                                }

                                                Element resizedSizeInGBElement3 = XmlUtility.getElementByTagNameNS(
                                                        dataDiskConfigurationsElement,
                                                        "http://schemas.microsoft.com/windowsazure",
                                                        "ResizedSizeInGB");
                                                if (resizedSizeInGBElement3 != null
                                                        && resizedSizeInGBElement3.getTextContent() != null
                                                        && !resizedSizeInGBElement3.getTextContent().isEmpty()) {
                                                    int resizedSizeInGBInstance3;
                                                    resizedSizeInGBInstance3 = DatatypeConverter
                                                            .parseInt(resizedSizeInGBElement3.getTextContent());
                                                    dataDiskConfigurationInstance
                                                            .setResizedSizeInGB(resizedSizeInGBInstance3);
                                                }
                                            }
                                        }
                                    }
                                }
                            }

                            Element sdkVersionElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "SdkVersion");
                            if (sdkVersionElement != null) {
                                String sdkVersionInstance;
                                sdkVersionInstance = sdkVersionElement.getTextContent();
                                deploymentInstance.setSdkVersion(sdkVersionInstance);
                            }

                            Element lockedElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Locked");
                            if (lockedElement != null) {
                                boolean lockedInstance;
                                lockedInstance = DatatypeConverter
                                        .parseBoolean(lockedElement.getTextContent().toLowerCase());
                                deploymentInstance.setLocked(lockedInstance);
                            }

                            Element rollbackAllowedElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "RollbackAllowed");
                            if (rollbackAllowedElement != null) {
                                boolean rollbackAllowedInstance;
                                rollbackAllowedInstance = DatatypeConverter
                                        .parseBoolean(rollbackAllowedElement.getTextContent().toLowerCase());
                                deploymentInstance.setRollbackAllowed(rollbackAllowedInstance);
                            }

                            Element createdTimeElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "CreatedTime");
                            if (createdTimeElement != null) {
                                Calendar createdTimeInstance;
                                createdTimeInstance = DatatypeConverter
                                        .parseDateTime(createdTimeElement.getTextContent());
                                deploymentInstance.setCreatedTime(createdTimeInstance);
                            }

                            Element lastModifiedTimeElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "LastModifiedTime");
                            if (lastModifiedTimeElement != null) {
                                String lastModifiedTimeInstance;
                                lastModifiedTimeInstance = lastModifiedTimeElement.getTextContent();
                                deploymentInstance.setLastModifiedTime(lastModifiedTimeInstance);
                            }

                            Element virtualNetworkNameElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "VirtualNetworkName");
                            if (virtualNetworkNameElement != null) {
                                String virtualNetworkNameInstance;
                                virtualNetworkNameInstance = virtualNetworkNameElement.getTextContent();
                                deploymentInstance.setVirtualNetworkName(virtualNetworkNameInstance);
                            }

                            Element extendedPropertiesSequenceElement = XmlUtility.getElementByTagNameNS(
                                    deploymentsElement, "http://schemas.microsoft.com/windowsazure",
                                    "ExtendedProperties");
                            if (extendedPropertiesSequenceElement != null) {
                                for (int i33 = 0; i33 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(extendedPropertiesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                        .size(); i33 = i33 + 1) {
                                    org.w3c.dom.Element extendedPropertiesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(extendedPropertiesSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                            .get(i33));
                                    String extendedPropertiesKey = XmlUtility
                                            .getElementByTagNameNS(extendedPropertiesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Name")
                                            .getTextContent();
                                    String extendedPropertiesValue = XmlUtility
                                            .getElementByTagNameNS(extendedPropertiesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Value")
                                            .getTextContent();
                                    deploymentInstance.getExtendedProperties().put(extendedPropertiesKey,
                                            extendedPropertiesValue);
                                }
                            }

                            Element persistentVMDowntimeElement = XmlUtility.getElementByTagNameNS(
                                    deploymentsElement, "http://schemas.microsoft.com/windowsazure",
                                    "PersistentVMDowntime");
                            if (persistentVMDowntimeElement != null) {
                                PersistentVMDowntime persistentVMDowntimeInstance = new PersistentVMDowntime();
                                deploymentInstance.setPersistentVMDowntime(persistentVMDowntimeInstance);

                                Element startTimeElement = XmlUtility.getElementByTagNameNS(
                                        persistentVMDowntimeElement, "http://schemas.microsoft.com/windowsazure",
                                        "StartTime");
                                if (startTimeElement != null) {
                                    Calendar startTimeInstance;
                                    startTimeInstance = DatatypeConverter
                                            .parseDateTime(startTimeElement.getTextContent());
                                    persistentVMDowntimeInstance.setStartTime(startTimeInstance);
                                }

                                Element endTimeElement = XmlUtility.getElementByTagNameNS(
                                        persistentVMDowntimeElement, "http://schemas.microsoft.com/windowsazure",
                                        "EndTime");
                                if (endTimeElement != null) {
                                    Calendar endTimeInstance;
                                    endTimeInstance = DatatypeConverter
                                            .parseDateTime(endTimeElement.getTextContent());
                                    persistentVMDowntimeInstance.setEndTime(endTimeInstance);
                                }

                                Element statusElement6 = XmlUtility.getElementByTagNameNS(
                                        persistentVMDowntimeElement, "http://schemas.microsoft.com/windowsazure",
                                        "Status");
                                if (statusElement6 != null) {
                                    String statusInstance6;
                                    statusInstance6 = statusElement6.getTextContent();
                                    persistentVMDowntimeInstance.setStatus(statusInstance6);
                                }
                            }

                            Element virtualIPsSequenceElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "VirtualIPs");
                            if (virtualIPsSequenceElement != null) {
                                for (int i34 = 0; i34 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(virtualIPsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "VirtualIP")
                                        .size(); i34 = i34 + 1) {
                                    org.w3c.dom.Element virtualIPsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(virtualIPsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "VirtualIP")
                                            .get(i34));
                                    VirtualIPAddress virtualIPInstance = new VirtualIPAddress();
                                    deploymentInstance.getVirtualIPAddresses().add(virtualIPInstance);

                                    Element addressElement3 = XmlUtility.getElementByTagNameNS(virtualIPsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Address");
                                    if (addressElement3 != null) {
                                        InetAddress addressInstance3;
                                        addressInstance3 = InetAddress.getByName(addressElement3.getTextContent());
                                        virtualIPInstance.setAddress(addressInstance3);
                                    }

                                    Element isDnsProgrammedElement = XmlUtility.getElementByTagNameNS(
                                            virtualIPsElement, "http://schemas.microsoft.com/windowsazure",
                                            "IsDnsProgrammed");
                                    if (isDnsProgrammedElement != null
                                            && isDnsProgrammedElement.getTextContent() != null
                                            && !isDnsProgrammedElement.getTextContent().isEmpty()) {
                                        boolean isDnsProgrammedInstance;
                                        isDnsProgrammedInstance = DatatypeConverter.parseBoolean(
                                                isDnsProgrammedElement.getTextContent().toLowerCase());
                                        virtualIPInstance.setIsDnsProgrammed(isDnsProgrammedInstance);
                                    }

                                    Element nameElement12 = XmlUtility.getElementByTagNameNS(virtualIPsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                    if (nameElement12 != null) {
                                        String nameInstance12;
                                        nameInstance12 = nameElement12.getTextContent();
                                        virtualIPInstance.setName(nameInstance12);
                                    }

                                    Element reservedIPNameElement = XmlUtility.getElementByTagNameNS(
                                            virtualIPsElement, "http://schemas.microsoft.com/windowsazure",
                                            "ReservedIPName");
                                    if (reservedIPNameElement != null) {
                                        String reservedIPNameInstance;
                                        reservedIPNameInstance = reservedIPNameElement.getTextContent();
                                        virtualIPInstance.setReservedIPName(reservedIPNameInstance);
                                    }
                                }
                            }

                            Element dnsElement = XmlUtility.getElementByTagNameNS(deploymentsElement,
                                    "http://schemas.microsoft.com/windowsazure", "Dns");
                            if (dnsElement != null) {
                                DnsSettings dnsInstance = new DnsSettings();
                                deploymentInstance.setDnsSettings(dnsInstance);

                                Element dnsServersSequenceElement = XmlUtility.getElementByTagNameNS(dnsElement,
                                        "http://schemas.microsoft.com/windowsazure", "DnsServers");
                                if (dnsServersSequenceElement != null) {
                                    for (int i35 = 0; i35 < com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(dnsServersSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "DnsServer")
                                            .size(); i35 = i35 + 1) {
                                        org.w3c.dom.Element dnsServersElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                                .getElementsByTagNameNS(dnsServersSequenceElement,
                                                        "http://schemas.microsoft.com/windowsazure", "DnsServer")
                                                .get(i35));
                                        DnsServer dnsServerInstance = new DnsServer();
                                        dnsInstance.getDnsServers().add(dnsServerInstance);

                                        Element nameElement13 = XmlUtility.getElementByTagNameNS(dnsServersElement,
                                                "http://schemas.microsoft.com/windowsazure", "Name");
                                        if (nameElement13 != null) {
                                            String nameInstance13;
                                            nameInstance13 = nameElement13.getTextContent();
                                            dnsServerInstance.setName(nameInstance13);
                                        }

                                        Element addressElement4 = XmlUtility.getElementByTagNameNS(
                                                dnsServersElement, "http://schemas.microsoft.com/windowsazure",
                                                "Address");
                                        if (addressElement4 != null) {
                                            InetAddress addressInstance4;
                                            addressInstance4 = InetAddress
                                                    .getByName(addressElement4.getTextContent());
                                            dnsServerInstance.setAddress(addressInstance4);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    Element urlElement2 = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "Url");
                    if (urlElement2 != null) {
                        URI urlInstance2;
                        urlInstance2 = new URI(urlElement2.getTextContent());
                        result.setUri(urlInstance2);
                    }

                    Element serviceNameElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "ServiceName");
                    if (serviceNameElement != null) {
                        String serviceNameInstance;
                        serviceNameInstance = serviceNameElement.getTextContent();
                        result.setServiceName(serviceNameInstance);
                    }

                    Element hostedServicePropertiesElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "HostedServiceProperties");
                    if (hostedServicePropertiesElement != null) {
                        HostedServiceProperties hostedServicePropertiesInstance = new HostedServiceProperties();
                        result.setProperties(hostedServicePropertiesInstance);

                        Element descriptionElement2 = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "Description");
                        if (descriptionElement2 != null) {
                            String descriptionInstance2;
                            descriptionInstance2 = descriptionElement2.getTextContent();
                            hostedServicePropertiesInstance.setDescription(descriptionInstance2);
                        }

                        Element affinityGroupElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "AffinityGroup");
                        if (affinityGroupElement != null) {
                            String affinityGroupInstance;
                            affinityGroupInstance = affinityGroupElement.getTextContent();
                            hostedServicePropertiesInstance.setAffinityGroup(affinityGroupInstance);
                        }

                        Element locationElement = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                "http://schemas.microsoft.com/windowsazure", "Location");
                        if (locationElement != null) {
                            String locationInstance;
                            locationInstance = locationElement.getTextContent();
                            hostedServicePropertiesInstance.setLocation(locationInstance);
                        }

                        Element labelElement3 = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                "http://schemas.microsoft.com/windowsazure", "Label");
                        if (labelElement3 != null) {
                            String labelInstance3;
                            labelInstance3 = labelElement3.getTextContent() != null
                                    ? new String(Base64.decode(labelElement3.getTextContent()))
                                    : null;
                            hostedServicePropertiesInstance.setLabel(labelInstance3);
                        }

                        Element statusElement7 = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                "http://schemas.microsoft.com/windowsazure", "Status");
                        if (statusElement7 != null && statusElement7.getTextContent() != null
                                && !statusElement7.getTextContent().isEmpty()) {
                            HostedServiceStatus statusInstance7;
                            statusInstance7 = HostedServiceStatus.valueOf(statusElement7.getTextContent());
                            hostedServicePropertiesInstance.setStatus(statusInstance7);
                        }

                        Element dateCreatedElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "DateCreated");
                        if (dateCreatedElement != null) {
                            Calendar dateCreatedInstance;
                            dateCreatedInstance = DatatypeConverter
                                    .parseDateTime(dateCreatedElement.getTextContent());
                            hostedServicePropertiesInstance.setDateCreated(dateCreatedInstance);
                        }

                        Element dateLastModifiedElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "DateLastModified");
                        if (dateLastModifiedElement != null) {
                            Calendar dateLastModifiedInstance;
                            dateLastModifiedInstance = DatatypeConverter
                                    .parseDateTime(dateLastModifiedElement.getTextContent());
                            hostedServicePropertiesInstance.setDateLastModified(dateLastModifiedInstance);
                        }

                        Element extendedPropertiesSequenceElement2 = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "ExtendedProperties");
                        if (extendedPropertiesSequenceElement2 != null) {
                            for (int i36 = 0; i36 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(extendedPropertiesSequenceElement2,
                                            "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                    .size(); i36 = i36 + 1) {
                                org.w3c.dom.Element extendedPropertiesElement2 = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(extendedPropertiesSequenceElement2,
                                                "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                        .get(i36));
                                String extendedPropertiesKey2 = XmlUtility
                                        .getElementByTagNameNS(extendedPropertiesElement2,
                                                "http://schemas.microsoft.com/windowsazure", "Name")
                                        .getTextContent();
                                String extendedPropertiesValue2 = XmlUtility
                                        .getElementByTagNameNS(extendedPropertiesElement2,
                                                "http://schemas.microsoft.com/windowsazure", "Value")
                                        .getTextContent();
                                hostedServicePropertiesInstance.getExtendedProperties().put(extendedPropertiesKey2,
                                        extendedPropertiesValue2);
                            }
                        }

                        Element reverseDnsFqdnElement = XmlUtility.getElementByTagNameNS(
                                hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                "ReverseDnsFqdn");
                        if (reverseDnsFqdnElement != null) {
                            String reverseDnsFqdnInstance;
                            reverseDnsFqdnInstance = reverseDnsFqdnElement.getTextContent();
                            hostedServicePropertiesInstance.setReverseDnsFqdn(reverseDnsFqdnInstance);
                        }
                    }

                    Element computeCapabilitiesElement = XmlUtility.getElementByTagNameNS(hostedServiceElement,
                            "http://schemas.microsoft.com/windowsazure", "ComputeCapabilities");
                    if (computeCapabilitiesElement != null) {
                        ComputeCapabilities computeCapabilitiesInstance = new ComputeCapabilities();
                        result.setComputeCapabilities(computeCapabilitiesInstance);

                        Element virtualMachinesRoleSizesSequenceElement = XmlUtility.getElementByTagNameNS(
                                computeCapabilitiesElement, "http://schemas.microsoft.com/windowsazure",
                                "VirtualMachinesRoleSizes");
                        if (virtualMachinesRoleSizesSequenceElement != null) {
                            for (int i37 = 0; i37 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(virtualMachinesRoleSizesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                    .size(); i37 = i37 + 1) {
                                org.w3c.dom.Element virtualMachinesRoleSizesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(virtualMachinesRoleSizesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                        .get(i37));
                                computeCapabilitiesInstance.getVirtualMachinesRoleSizes()
                                        .add(virtualMachinesRoleSizesElement.getTextContent());
                            }
                        }

                        Element webWorkerRoleSizesSequenceElement = XmlUtility.getElementByTagNameNS(
                                computeCapabilitiesElement, "http://schemas.microsoft.com/windowsazure",
                                "WebWorkerRoleSizes");
                        if (webWorkerRoleSizesSequenceElement != null) {
                            for (int i38 = 0; i38 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(webWorkerRoleSizesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                    .size(); i38 = i38 + 1) {
                                org.w3c.dom.Element webWorkerRoleSizesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(webWorkerRoleSizesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                        .get(i38));
                                computeCapabilitiesInstance.getWebWorkerRoleSizes()
                                        .add(webWorkerRoleSizesElement.getTextContent());
                            }
                        }
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Get Extension operation retrieves information about a specified
    * extension that was added to a cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169557.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param extensionId Required. The identifier that was assigned to the
    * extension when it was added to the cloud service
    * @return The Get Extension operation response.
    */
    @Override
    public Future<HostedServiceGetExtensionResponse> getExtensionAsync(final String serviceName,
            final String extensionId) {
        return this.getClient().getExecutorService().submit(new Callable<HostedServiceGetExtensionResponse>() {
            @Override
            public HostedServiceGetExtensionResponse call() throws Exception {
                return getExtension(serviceName, extensionId);
            }
        });
    }

    /**
    * The Get Extension operation retrieves information about a specified
    * extension that was added to a cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169557.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param extensionId Required. The identifier that was assigned to the
    * extension when it was added to the cloud service
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @return The Get Extension operation response.
    */
    @Override
    public HostedServiceGetExtensionResponse getExtension(String serviceName, String extensionId)
            throws IOException, ServiceException, ParserConfigurationException, SAXException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }
        // TODO: Validate serviceName is a valid DNS name.
        if (extensionId == null) {
            throw new NullPointerException("extensionId");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            tracingParameters.put("extensionId", extensionId);
            CloudTracing.enter(invocationId, this, "getExtensionAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        url = url + "/extensions/";
        url = url + URLEncoder.encode(extensionId, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceGetExtensionResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceGetExtensionResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element extensionElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "Extension");
                if (extensionElement != null) {
                    Element providerNameSpaceElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "ProviderNameSpace");
                    if (providerNameSpaceElement != null) {
                        String providerNameSpaceInstance;
                        providerNameSpaceInstance = providerNameSpaceElement.getTextContent();
                        result.setProviderNamespace(providerNameSpaceInstance);
                    }

                    Element typeElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "Type");
                    if (typeElement != null) {
                        String typeInstance;
                        typeInstance = typeElement.getTextContent();
                        result.setType(typeInstance);
                    }

                    Element idElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "Id");
                    if (idElement != null) {
                        String idInstance;
                        idInstance = idElement.getTextContent();
                        result.setId(idInstance);
                    }

                    Element versionElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "Version");
                    if (versionElement != null) {
                        String versionInstance;
                        versionInstance = versionElement.getTextContent();
                        result.setVersion(versionInstance);
                    }

                    Element thumbprintElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "Thumbprint");
                    if (thumbprintElement != null) {
                        String thumbprintInstance;
                        thumbprintInstance = thumbprintElement.getTextContent();
                        result.setThumbprint(thumbprintInstance);
                    }

                    Element thumbprintAlgorithmElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "ThumbprintAlgorithm");
                    if (thumbprintAlgorithmElement != null) {
                        String thumbprintAlgorithmInstance;
                        thumbprintAlgorithmInstance = thumbprintAlgorithmElement.getTextContent();
                        result.setThumbprintAlgorithm(thumbprintAlgorithmInstance);
                    }

                    Element publicConfigurationElement = XmlUtility.getElementByTagNameNS(extensionElement,
                            "http://schemas.microsoft.com/windowsazure", "PublicConfiguration");
                    if (publicConfigurationElement != null) {
                        String publicConfigurationInstance;
                        publicConfigurationInstance = publicConfigurationElement.getTextContent() != null
                                ? new String(Base64.decode(publicConfigurationElement.getTextContent()))
                                : null;
                        result.setPublicConfiguration(publicConfigurationInstance);
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The List Hosted Services operation lists the cloud services available
    * under the current subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460781.aspx for
    * more information)
    *
    * @return The List Hosted Service operation response.
    */
    @Override
    public Future<HostedServiceListResponse> listAsync() {
        return this.getClient().getExecutorService().submit(new Callable<HostedServiceListResponse>() {
            @Override
            public HostedServiceListResponse call() throws Exception {
                return list();
            }
        });
    }

    /**
    * The List Hosted Services operation lists the cloud services available
    * under the current subscription.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/ee460781.aspx for
    * more information)
    *
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return The List Hosted Service operation response.
    */
    @Override
    public HostedServiceListResponse list()
            throws IOException, ServiceException, ParserConfigurationException, SAXException, URISyntaxException {
        // Validate

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            CloudTracing.enter(invocationId, this, "listAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices";
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceListResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceListResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element hostedServicesSequenceElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "HostedServices");
                if (hostedServicesSequenceElement != null) {
                    for (int i1 = 0; i1 < com.microsoft.windowsazure.core.utils.XmlUtility
                            .getElementsByTagNameNS(hostedServicesSequenceElement,
                                    "http://schemas.microsoft.com/windowsazure", "HostedService")
                            .size(); i1 = i1 + 1) {
                        org.w3c.dom.Element hostedServicesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                .getElementsByTagNameNS(hostedServicesSequenceElement,
                                        "http://schemas.microsoft.com/windowsazure", "HostedService")
                                .get(i1));
                        HostedServiceListResponse.HostedService hostedServiceInstance = new HostedServiceListResponse.HostedService();
                        result.getHostedServices().add(hostedServiceInstance);

                        Element urlElement = XmlUtility.getElementByTagNameNS(hostedServicesElement,
                                "http://schemas.microsoft.com/windowsazure", "Url");
                        if (urlElement != null) {
                            URI urlInstance;
                            urlInstance = new URI(urlElement.getTextContent());
                            hostedServiceInstance.setUri(urlInstance);
                        }

                        Element serviceNameElement = XmlUtility.getElementByTagNameNS(hostedServicesElement,
                                "http://schemas.microsoft.com/windowsazure", "ServiceName");
                        if (serviceNameElement != null) {
                            String serviceNameInstance;
                            serviceNameInstance = serviceNameElement.getTextContent();
                            hostedServiceInstance.setServiceName(serviceNameInstance);
                        }

                        Element hostedServicePropertiesElement = XmlUtility.getElementByTagNameNS(
                                hostedServicesElement, "http://schemas.microsoft.com/windowsazure",
                                "HostedServiceProperties");
                        if (hostedServicePropertiesElement != null) {
                            HostedServiceProperties hostedServicePropertiesInstance = new HostedServiceProperties();
                            hostedServiceInstance.setProperties(hostedServicePropertiesInstance);

                            Element descriptionElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "Description");
                            if (descriptionElement != null) {
                                String descriptionInstance;
                                descriptionInstance = descriptionElement.getTextContent();
                                hostedServicePropertiesInstance.setDescription(descriptionInstance);
                            }

                            Element affinityGroupElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "AffinityGroup");
                            if (affinityGroupElement != null) {
                                String affinityGroupInstance;
                                affinityGroupInstance = affinityGroupElement.getTextContent();
                                hostedServicePropertiesInstance.setAffinityGroup(affinityGroupInstance);
                            }

                            Element locationElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "Location");
                            if (locationElement != null) {
                                String locationInstance;
                                locationInstance = locationElement.getTextContent();
                                hostedServicePropertiesInstance.setLocation(locationInstance);
                            }

                            Element labelElement = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                    "http://schemas.microsoft.com/windowsazure", "Label");
                            if (labelElement != null) {
                                String labelInstance;
                                labelInstance = labelElement.getTextContent() != null
                                        ? new String(Base64.decode(labelElement.getTextContent()))
                                        : null;
                                hostedServicePropertiesInstance.setLabel(labelInstance);
                            }

                            Element statusElement = XmlUtility.getElementByTagNameNS(hostedServicePropertiesElement,
                                    "http://schemas.microsoft.com/windowsazure", "Status");
                            if (statusElement != null && statusElement.getTextContent() != null
                                    && !statusElement.getTextContent().isEmpty()) {
                                HostedServiceStatus statusInstance;
                                statusInstance = HostedServiceStatus.valueOf(statusElement.getTextContent());
                                hostedServicePropertiesInstance.setStatus(statusInstance);
                            }

                            Element dateCreatedElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "DateCreated");
                            if (dateCreatedElement != null) {
                                Calendar dateCreatedInstance;
                                dateCreatedInstance = DatatypeConverter
                                        .parseDateTime(dateCreatedElement.getTextContent());
                                hostedServicePropertiesInstance.setDateCreated(dateCreatedInstance);
                            }

                            Element dateLastModifiedElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "DateLastModified");
                            if (dateLastModifiedElement != null) {
                                Calendar dateLastModifiedInstance;
                                dateLastModifiedInstance = DatatypeConverter
                                        .parseDateTime(dateLastModifiedElement.getTextContent());
                                hostedServicePropertiesInstance.setDateLastModified(dateLastModifiedInstance);
                            }

                            Element extendedPropertiesSequenceElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "ExtendedProperties");
                            if (extendedPropertiesSequenceElement != null) {
                                for (int i2 = 0; i2 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(extendedPropertiesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                        .size(); i2 = i2 + 1) {
                                    org.w3c.dom.Element extendedPropertiesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(extendedPropertiesSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "ExtendedProperty")
                                            .get(i2));
                                    String extendedPropertiesKey = XmlUtility
                                            .getElementByTagNameNS(extendedPropertiesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Name")
                                            .getTextContent();
                                    String extendedPropertiesValue = XmlUtility
                                            .getElementByTagNameNS(extendedPropertiesElement,
                                                    "http://schemas.microsoft.com/windowsazure", "Value")
                                            .getTextContent();
                                    hostedServicePropertiesInstance.getExtendedProperties()
                                            .put(extendedPropertiesKey, extendedPropertiesValue);
                                }
                            }

                            Element reverseDnsFqdnElement = XmlUtility.getElementByTagNameNS(
                                    hostedServicePropertiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "ReverseDnsFqdn");
                            if (reverseDnsFqdnElement != null) {
                                String reverseDnsFqdnInstance;
                                reverseDnsFqdnInstance = reverseDnsFqdnElement.getTextContent();
                                hostedServicePropertiesInstance.setReverseDnsFqdn(reverseDnsFqdnInstance);
                            }
                        }

                        Element computeCapabilitiesElement = XmlUtility.getElementByTagNameNS(hostedServicesElement,
                                "http://schemas.microsoft.com/windowsazure", "ComputeCapabilities");
                        if (computeCapabilitiesElement != null) {
                            ComputeCapabilities computeCapabilitiesInstance = new ComputeCapabilities();
                            hostedServiceInstance.setComputeCapabilities(computeCapabilitiesInstance);

                            Element virtualMachinesRoleSizesSequenceElement = XmlUtility.getElementByTagNameNS(
                                    computeCapabilitiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "VirtualMachinesRoleSizes");
                            if (virtualMachinesRoleSizesSequenceElement != null) {
                                for (int i3 = 0; i3 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(virtualMachinesRoleSizesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                        .size(); i3 = i3 + 1) {
                                    org.w3c.dom.Element virtualMachinesRoleSizesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(virtualMachinesRoleSizesSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                            .get(i3));
                                    computeCapabilitiesInstance.getVirtualMachinesRoleSizes()
                                            .add(virtualMachinesRoleSizesElement.getTextContent());
                                }
                            }

                            Element webWorkerRoleSizesSequenceElement = XmlUtility.getElementByTagNameNS(
                                    computeCapabilitiesElement, "http://schemas.microsoft.com/windowsazure",
                                    "WebWorkerRoleSizes");
                            if (webWorkerRoleSizesSequenceElement != null) {
                                for (int i4 = 0; i4 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(webWorkerRoleSizesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                        .size(); i4 = i4 + 1) {
                                    org.w3c.dom.Element webWorkerRoleSizesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(webWorkerRoleSizesSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "RoleSize")
                                            .get(i4));
                                    computeCapabilitiesInstance.getWebWorkerRoleSizes()
                                            .add(webWorkerRoleSizesElement.getTextContent());
                                }
                            }
                        }
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The List Available Extensions operation lists the extensions that are
    * available to add to your cloud service. In Windows Azure, a process can
    * run as an extension of a cloud service. For example, Remote Desktop
    * Access or the Azure Diagnostics Agent can run as extensions to the cloud
    * service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169559.aspx for
    * more information)
    *
    * @return The List Available Extensions operation response.
    */
    @Override
    public Future<HostedServiceListAvailableExtensionsResponse> listAvailableExtensionsAsync() {
        return this.getClient().getExecutorService()
                .submit(new Callable<HostedServiceListAvailableExtensionsResponse>() {
                    @Override
                    public HostedServiceListAvailableExtensionsResponse call() throws Exception {
                        return listAvailableExtensions();
                    }
                });
    }

    /**
    * The List Available Extensions operation lists the extensions that are
    * available to add to your cloud service. In Windows Azure, a process can
    * run as an extension of a cloud service. For example, Remote Desktop
    * Access or the Azure Diagnostics Agent can run as extensions to the cloud
    * service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169559.aspx for
    * more information)
    *
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return The List Available Extensions operation response.
    */
    @Override
    public HostedServiceListAvailableExtensionsResponse listAvailableExtensions()
            throws IOException, ServiceException, ParserConfigurationException, SAXException, URISyntaxException {
        // Validate

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            CloudTracing.enter(invocationId, this, "listAvailableExtensionsAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/extensions";
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceListAvailableExtensionsResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceListAvailableExtensionsResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element extensionImagesSequenceElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "ExtensionImages");
                if (extensionImagesSequenceElement != null) {
                    for (int i1 = 0; i1 < com.microsoft.windowsazure.core.utils.XmlUtility
                            .getElementsByTagNameNS(extensionImagesSequenceElement,
                                    "http://schemas.microsoft.com/windowsazure", "ExtensionImage")
                            .size(); i1 = i1 + 1) {
                        org.w3c.dom.Element extensionImagesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                .getElementsByTagNameNS(extensionImagesSequenceElement,
                                        "http://schemas.microsoft.com/windowsazure", "ExtensionImage")
                                .get(i1));
                        ExtensionImage extensionImageInstance = new ExtensionImage();
                        result.getExtensionImages().add(extensionImageInstance);

                        Element providerNameSpaceElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "ProviderNameSpace");
                        if (providerNameSpaceElement != null) {
                            String providerNameSpaceInstance;
                            providerNameSpaceInstance = providerNameSpaceElement.getTextContent();
                            extensionImageInstance.setProviderNameSpace(providerNameSpaceInstance);
                        }

                        Element typeElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Type");
                        if (typeElement != null) {
                            String typeInstance;
                            typeInstance = typeElement.getTextContent();
                            extensionImageInstance.setType(typeInstance);
                        }

                        Element versionElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Version");
                        if (versionElement != null) {
                            String versionInstance;
                            versionInstance = versionElement.getTextContent();
                            extensionImageInstance.setVersion(versionInstance);
                        }

                        Element labelElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Label");
                        if (labelElement != null) {
                            String labelInstance;
                            labelInstance = labelElement.getTextContent();
                            extensionImageInstance.setLabel(labelInstance);
                        }

                        Element hostingResourcesElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "HostingResources");
                        if (hostingResourcesElement != null) {
                            String hostingResourcesInstance;
                            hostingResourcesInstance = hostingResourcesElement.getTextContent();
                            extensionImageInstance.setHostingResources(hostingResourcesInstance);
                        }

                        Element mediaLinkElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "MediaLink");
                        if (mediaLinkElement != null) {
                            URI mediaLinkInstance;
                            mediaLinkInstance = new URI(mediaLinkElement.getTextContent());
                            extensionImageInstance.setMediaLink(mediaLinkInstance);
                        }

                        Element certificateElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Certificate");
                        if (certificateElement != null) {
                            ExtensionCertificateConfiguration certificateInstance = new ExtensionCertificateConfiguration();
                            extensionImageInstance.setCertificate(certificateInstance);

                            Element storeLocationElement = XmlUtility.getElementByTagNameNS(certificateElement,
                                    "http://schemas.microsoft.com/windowsazure", "StoreLocation");
                            if (storeLocationElement != null) {
                                String storeLocationInstance;
                                storeLocationInstance = storeLocationElement.getTextContent();
                                certificateInstance.setStoreLocation(storeLocationInstance);
                            }

                            Element storeNameElement = XmlUtility.getElementByTagNameNS(certificateElement,
                                    "http://schemas.microsoft.com/windowsazure", "StoreName");
                            if (storeNameElement != null) {
                                String storeNameInstance;
                                storeNameInstance = storeNameElement.getTextContent();
                                certificateInstance.setStoreName(storeNameInstance);
                            }

                            Element thumbprintRequiredElement = XmlUtility.getElementByTagNameNS(certificateElement,
                                    "http://schemas.microsoft.com/windowsazure", "ThumbprintRequired");
                            if (thumbprintRequiredElement != null
                                    && thumbprintRequiredElement.getTextContent() != null
                                    && !thumbprintRequiredElement.getTextContent().isEmpty()) {
                                boolean thumbprintRequiredInstance;
                                thumbprintRequiredInstance = DatatypeConverter
                                        .parseBoolean(thumbprintRequiredElement.getTextContent().toLowerCase());
                                certificateInstance.setThumbprintRequired(thumbprintRequiredInstance);
                            }

                            Element thumbprintAlgorithmElement = XmlUtility.getElementByTagNameNS(
                                    certificateElement, "http://schemas.microsoft.com/windowsazure",
                                    "ThumbprintAlgorithm");
                            if (thumbprintAlgorithmElement != null) {
                                String thumbprintAlgorithmInstance;
                                thumbprintAlgorithmInstance = thumbprintAlgorithmElement.getTextContent();
                                certificateInstance.setThumbprintAlgorithm(thumbprintAlgorithmInstance);
                            }
                        }

                        Element endpointsElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Endpoints");
                        if (endpointsElement != null) {
                            ExtensionEndpointConfiguration endpointsInstance = new ExtensionEndpointConfiguration();
                            extensionImageInstance.setExtensionEndpoints(endpointsInstance);

                            Element inputEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                    endpointsElement, "http://schemas.microsoft.com/windowsazure",
                                    "InputEndpoints");
                            if (inputEndpointsSequenceElement != null) {
                                for (int i2 = 0; i2 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(inputEndpointsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "InputEndpoint")
                                        .size(); i2 = i2 + 1) {
                                    org.w3c.dom.Element inputEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(inputEndpointsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "InputEndpoint")
                                            .get(i2));
                                    ExtensionEndpointConfiguration.InputEndpoint inputEndpointInstance = new ExtensionEndpointConfiguration.InputEndpoint();
                                    endpointsInstance.getInputEndpoints().add(inputEndpointInstance);

                                    Element nameElement = XmlUtility.getElementByTagNameNS(inputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                    if (nameElement != null) {
                                        String nameInstance;
                                        nameInstance = nameElement.getTextContent();
                                        inputEndpointInstance.setName(nameInstance);
                                    }

                                    Element protocolElement = XmlUtility.getElementByTagNameNS(
                                            inputEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Protocol");
                                    if (protocolElement != null) {
                                        String protocolInstance;
                                        protocolInstance = protocolElement.getTextContent();
                                        inputEndpointInstance.setProtocol(protocolInstance);
                                    }

                                    Element portElement = XmlUtility.getElementByTagNameNS(inputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Port");
                                    if (portElement != null) {
                                        int portInstance;
                                        portInstance = DatatypeConverter.parseInt(portElement.getTextContent());
                                        inputEndpointInstance.setPort(portInstance);
                                    }

                                    Element localPortElement = XmlUtility.getElementByTagNameNS(
                                            inputEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "LocalPort");
                                    if (localPortElement != null) {
                                        String localPortInstance;
                                        localPortInstance = localPortElement.getTextContent();
                                        inputEndpointInstance.setLocalPort(localPortInstance);
                                    }
                                }
                            }

                            Element internalEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                    endpointsElement, "http://schemas.microsoft.com/windowsazure",
                                    "InternalEndpoints");
                            if (internalEndpointsSequenceElement != null) {
                                for (int i3 = 0; i3 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(internalEndpointsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "InternalEndpoint")
                                        .size(); i3 = i3 + 1) {
                                    org.w3c.dom.Element internalEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(internalEndpointsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "InternalEndpoint")
                                            .get(i3));
                                    ExtensionEndpointConfiguration.InternalEndpoint internalEndpointInstance = new ExtensionEndpointConfiguration.InternalEndpoint();
                                    endpointsInstance.getInternalEndpoints().add(internalEndpointInstance);

                                    Element nameElement2 = XmlUtility.getElementByTagNameNS(
                                            internalEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Name");
                                    if (nameElement2 != null) {
                                        String nameInstance2;
                                        nameInstance2 = nameElement2.getTextContent();
                                        internalEndpointInstance.setName(nameInstance2);
                                    }

                                    Element protocolElement2 = XmlUtility.getElementByTagNameNS(
                                            internalEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Protocol");
                                    if (protocolElement2 != null) {
                                        String protocolInstance2;
                                        protocolInstance2 = protocolElement2.getTextContent();
                                        internalEndpointInstance.setProtocol(protocolInstance2);
                                    }

                                    Element portElement2 = XmlUtility.getElementByTagNameNS(
                                            internalEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Port");
                                    if (portElement2 != null) {
                                        int portInstance2;
                                        portInstance2 = DatatypeConverter.parseInt(portElement2.getTextContent());
                                        internalEndpointInstance.setPort(portInstance2);
                                    }
                                }
                            }

                            Element instanceInputEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                    endpointsElement, "http://schemas.microsoft.com/windowsazure",
                                    "InstanceInputEndpoints");
                            if (instanceInputEndpointsSequenceElement != null) {
                                for (int i4 = 0; i4 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(instanceInputEndpointsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure",
                                                "InstanceInputEndpoint")
                                        .size(); i4 = i4 + 1) {
                                    org.w3c.dom.Element instanceInputEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(instanceInputEndpointsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "InstanceInputEndpoint")
                                            .get(i4));
                                    ExtensionEndpointConfiguration.InstanceInputEndpoint instanceInputEndpointInstance = new ExtensionEndpointConfiguration.InstanceInputEndpoint();
                                    endpointsInstance.getInstanceInputEndpoints()
                                            .add(instanceInputEndpointInstance);

                                    Element nameElement3 = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                    if (nameElement3 != null) {
                                        String nameInstance3;
                                        nameInstance3 = nameElement3.getTextContent();
                                        instanceInputEndpointInstance.setName(nameInstance3);
                                    }

                                    Element protocolElement3 = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Protocol");
                                    if (protocolElement3 != null) {
                                        String protocolInstance3;
                                        protocolInstance3 = protocolElement3.getTextContent();
                                        instanceInputEndpointInstance.setProtocol(protocolInstance3);
                                    }

                                    Element localPortElement2 = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "LocalPort");
                                    if (localPortElement2 != null) {
                                        String localPortInstance2;
                                        localPortInstance2 = localPortElement2.getTextContent();
                                        instanceInputEndpointInstance.setLocalPort(localPortInstance2);
                                    }

                                    Element fixedPortMinElement = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "FixedPortMin");
                                    if (fixedPortMinElement != null) {
                                        int fixedPortMinInstance;
                                        fixedPortMinInstance = DatatypeConverter
                                                .parseInt(fixedPortMinElement.getTextContent());
                                        instanceInputEndpointInstance.setFixedPortMin(fixedPortMinInstance);
                                    }

                                    Element fixedPortMaxElement = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "FixedPortMax");
                                    if (fixedPortMaxElement != null) {
                                        int fixedPortMaxInstance;
                                        fixedPortMaxInstance = DatatypeConverter
                                                .parseInt(fixedPortMaxElement.getTextContent());
                                        instanceInputEndpointInstance.setFixedPortMax(fixedPortMaxInstance);
                                    }
                                }
                            }
                        }

                        Element publicConfigurationSchemaElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "PublicConfigurationSchema");
                        if (publicConfigurationSchemaElement != null) {
                            String publicConfigurationSchemaInstance;
                            publicConfigurationSchemaInstance = publicConfigurationSchemaElement
                                    .getTextContent() != null ? new String(
                                            Base64.decode(publicConfigurationSchemaElement.getTextContent()))
                                            : null;
                            extensionImageInstance.setPublicConfigurationSchema(publicConfigurationSchemaInstance);
                        }

                        Element privateConfigurationSchemaElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "PrivateConfigurationSchema");
                        if (privateConfigurationSchemaElement != null) {
                            String privateConfigurationSchemaInstance;
                            privateConfigurationSchemaInstance = privateConfigurationSchemaElement
                                    .getTextContent() != null ? new String(
                                            Base64.decode(privateConfigurationSchemaElement.getTextContent()))
                                            : null;
                            extensionImageInstance
                                    .setPrivateConfigurationSchema(privateConfigurationSchemaInstance);
                        }

                        Element descriptionElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Description");
                        if (descriptionElement != null) {
                            String descriptionInstance;
                            descriptionInstance = descriptionElement.getTextContent();
                            extensionImageInstance.setDescription(descriptionInstance);
                        }

                        Element publisherNameElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "PublisherName");
                        if (publisherNameElement != null) {
                            String publisherNameInstance;
                            publisherNameInstance = publisherNameElement.getTextContent();
                            extensionImageInstance.setPublisherName(publisherNameInstance);
                        }

                        Element publishedDateElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "PublishedDate");
                        if (publishedDateElement != null && publishedDateElement.getTextContent() != null
                                && !publishedDateElement.getTextContent().isEmpty()) {
                            Calendar publishedDateInstance;
                            publishedDateInstance = DatatypeConverter
                                    .parseDateTime(publishedDateElement.getTextContent());
                            extensionImageInstance.setPublishedDate(publishedDateInstance);
                        }

                        Element localResourcesSequenceElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "LocalResources");
                        if (localResourcesSequenceElement != null) {
                            for (int i5 = 0; i5 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(localResourcesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "LocalResource")
                                    .size(); i5 = i5 + 1) {
                                org.w3c.dom.Element localResourcesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(localResourcesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "LocalResource")
                                        .get(i5));
                                ExtensionLocalResourceConfiguration localResourceInstance = new ExtensionLocalResourceConfiguration();
                                extensionImageInstance.getLocalResources().add(localResourceInstance);

                                Element nameElement4 = XmlUtility.getElementByTagNameNS(localResourcesElement,
                                        "http://schemas.microsoft.com/windowsazure", "Name");
                                if (nameElement4 != null) {
                                    String nameInstance4;
                                    nameInstance4 = nameElement4.getTextContent();
                                    localResourceInstance.setName(nameInstance4);
                                }

                                Element sizeInMBElement = XmlUtility.getElementByTagNameNS(localResourcesElement,
                                        "http://schemas.microsoft.com/windowsazure", "SizeInMB");
                                if (sizeInMBElement != null && sizeInMBElement.getTextContent() != null
                                        && !sizeInMBElement.getTextContent().isEmpty()) {
                                    int sizeInMBInstance;
                                    sizeInMBInstance = DatatypeConverter.parseInt(sizeInMBElement.getTextContent());
                                    localResourceInstance.setSizeInMB(sizeInMBInstance);
                                }
                            }
                        }

                        Element blockRoleUponFailureElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "BlockRoleUponFailure");
                        if (blockRoleUponFailureElement != null
                                && blockRoleUponFailureElement.getTextContent() != null
                                && !blockRoleUponFailureElement.getTextContent().isEmpty()) {
                            boolean blockRoleUponFailureInstance;
                            blockRoleUponFailureInstance = DatatypeConverter
                                    .parseBoolean(blockRoleUponFailureElement.getTextContent().toLowerCase());
                            extensionImageInstance.setBlockRoleUponFailure(blockRoleUponFailureInstance);
                        }

                        Element isInternalExtensionElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "IsInternalExtension");
                        if (isInternalExtensionElement != null
                                && isInternalExtensionElement.getTextContent() != null
                                && !isInternalExtensionElement.getTextContent().isEmpty()) {
                            boolean isInternalExtensionInstance;
                            isInternalExtensionInstance = DatatypeConverter
                                    .parseBoolean(isInternalExtensionElement.getTextContent().toLowerCase());
                            extensionImageInstance.setIsInternalExtension(isInternalExtensionInstance);
                        }

                        Element sampleConfigElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "SampleConfig");
                        if (sampleConfigElement != null) {
                            String sampleConfigInstance;
                            sampleConfigInstance = sampleConfigElement.getTextContent() != null
                                    ? new String(Base64.decode(sampleConfigElement.getTextContent()))
                                    : null;
                            extensionImageInstance.setSampleConfig(sampleConfigInstance);
                        }

                        Element replicationCompletedElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "ReplicationCompleted");
                        if (replicationCompletedElement != null
                                && replicationCompletedElement.getTextContent() != null
                                && !replicationCompletedElement.getTextContent().isEmpty()) {
                            boolean replicationCompletedInstance;
                            replicationCompletedInstance = DatatypeConverter
                                    .parseBoolean(replicationCompletedElement.getTextContent().toLowerCase());
                            extensionImageInstance.setReplicationCompleted(replicationCompletedInstance);
                        }

                        Element eulaElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Eula");
                        if (eulaElement != null) {
                            URI eulaInstance;
                            eulaInstance = new URI(eulaElement.getTextContent());
                            extensionImageInstance.setEula(eulaInstance);
                        }

                        Element privacyUriElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "PrivacyUri");
                        if (privacyUriElement != null) {
                            URI privacyUriInstance;
                            privacyUriInstance = new URI(privacyUriElement.getTextContent());
                            extensionImageInstance.setPrivacyUri(privacyUriInstance);
                        }

                        Element homepageUriElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "HomepageUri");
                        if (homepageUriElement != null) {
                            URI homepageUriInstance;
                            homepageUriInstance = new URI(homepageUriElement.getTextContent());
                            extensionImageInstance.setHomepageUri(homepageUriInstance);
                        }

                        Element isJsonExtensionElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "IsJsonExtension");
                        if (isJsonExtensionElement != null && isJsonExtensionElement.getTextContent() != null
                                && !isJsonExtensionElement.getTextContent().isEmpty()) {
                            boolean isJsonExtensionInstance;
                            isJsonExtensionInstance = DatatypeConverter
                                    .parseBoolean(isJsonExtensionElement.getTextContent().toLowerCase());
                            extensionImageInstance.setIsJsonExtension(isJsonExtensionInstance);
                        }

                        Element disallowMajorVersionUpgradeElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "DisallowMajorVersionUpgrade");
                        if (disallowMajorVersionUpgradeElement != null
                                && disallowMajorVersionUpgradeElement.getTextContent() != null
                                && !disallowMajorVersionUpgradeElement.getTextContent().isEmpty()) {
                            boolean disallowMajorVersionUpgradeInstance;
                            disallowMajorVersionUpgradeInstance = DatatypeConverter.parseBoolean(
                                    disallowMajorVersionUpgradeElement.getTextContent().toLowerCase());
                            extensionImageInstance
                                    .setDisallowMajorVersionUpgrade(disallowMajorVersionUpgradeInstance);
                        }

                        Element supportedOSElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "SupportedOS");
                        if (supportedOSElement != null) {
                            String supportedOSInstance;
                            supportedOSInstance = supportedOSElement.getTextContent();
                            extensionImageInstance.setSupportedOS(supportedOSInstance);
                        }

                        Element companyNameElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "CompanyName");
                        if (companyNameElement != null) {
                            String companyNameInstance;
                            companyNameInstance = companyNameElement.getTextContent();
                            extensionImageInstance.setCompanyName(companyNameInstance);
                        }

                        Element regionsElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Regions");
                        if (regionsElement != null) {
                            String regionsInstance;
                            regionsInstance = regionsElement.getTextContent();
                            extensionImageInstance.setRegions(regionsInstance);
                        }
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The List Extensions operation lists all of the extensions that were added
    * to a cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169561.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @return The List Extensions operation response.
    */
    @Override
    public Future<HostedServiceListExtensionsResponse> listExtensionsAsync(final String serviceName) {
        return this.getClient().getExecutorService().submit(new Callable<HostedServiceListExtensionsResponse>() {
            @Override
            public HostedServiceListExtensionsResponse call() throws Exception {
                return listExtensions(serviceName);
            }
        });
    }

    /**
    * The List Extensions operation lists all of the extensions that were added
    * to a cloud service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn169561.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @return The List Extensions operation response.
    */
    @Override
    public HostedServiceListExtensionsResponse listExtensions(String serviceName)
            throws IOException, ServiceException, ParserConfigurationException, SAXException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }
        // TODO: Validate serviceName is a valid DNS name.

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            CloudTracing.enter(invocationId, this, "listExtensionsAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        url = url + "/extensions";
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceListExtensionsResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceListExtensionsResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element extensionsSequenceElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "Extensions");
                if (extensionsSequenceElement != null) {
                    for (int i1 = 0; i1 < com.microsoft.windowsazure.core.utils.XmlUtility
                            .getElementsByTagNameNS(extensionsSequenceElement,
                                    "http://schemas.microsoft.com/windowsazure", "Extension")
                            .size(); i1 = i1 + 1) {
                        org.w3c.dom.Element extensionsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                .getElementsByTagNameNS(extensionsSequenceElement,
                                        "http://schemas.microsoft.com/windowsazure", "Extension")
                                .get(i1));
                        HostedServiceListExtensionsResponse.Extension extensionInstance = new HostedServiceListExtensionsResponse.Extension();
                        result.getExtensions().add(extensionInstance);

                        Element providerNameSpaceElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "ProviderNameSpace");
                        if (providerNameSpaceElement != null) {
                            String providerNameSpaceInstance;
                            providerNameSpaceInstance = providerNameSpaceElement.getTextContent();
                            extensionInstance.setProviderNamespace(providerNameSpaceInstance);
                        }

                        Element typeElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "Type");
                        if (typeElement != null) {
                            String typeInstance;
                            typeInstance = typeElement.getTextContent();
                            extensionInstance.setType(typeInstance);
                        }

                        Element idElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "Id");
                        if (idElement != null) {
                            String idInstance;
                            idInstance = idElement.getTextContent();
                            extensionInstance.setId(idInstance);
                        }

                        Element versionElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "Version");
                        if (versionElement != null) {
                            String versionInstance;
                            versionInstance = versionElement.getTextContent();
                            extensionInstance.setVersion(versionInstance);
                        }

                        Element thumbprintElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "Thumbprint");
                        if (thumbprintElement != null) {
                            String thumbprintInstance;
                            thumbprintInstance = thumbprintElement.getTextContent();
                            extensionInstance.setThumbprint(thumbprintInstance);
                        }

                        Element thumbprintAlgorithmElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "ThumbprintAlgorithm");
                        if (thumbprintAlgorithmElement != null) {
                            String thumbprintAlgorithmInstance;
                            thumbprintAlgorithmInstance = thumbprintAlgorithmElement.getTextContent();
                            extensionInstance.setThumbprintAlgorithm(thumbprintAlgorithmInstance);
                        }

                        Element publicConfigurationElement = XmlUtility.getElementByTagNameNS(extensionsElement,
                                "http://schemas.microsoft.com/windowsazure", "PublicConfiguration");
                        if (publicConfigurationElement != null) {
                            String publicConfigurationInstance;
                            publicConfigurationInstance = publicConfigurationElement.getTextContent() != null
                                    ? new String(Base64.decode(publicConfigurationElement.getTextContent()))
                                    : null;
                            extensionInstance.setPublicConfiguration(publicConfigurationInstance);
                        }
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The List Extension Versions operation lists the versions of an extension
    * that are available to add to a cloud service. In Azure, a process can
    * run as an extension of a cloud service. For example, Remote Desktop
    * Access or the Azure Diagnostics Agent can run as extensions to the cloud
    * service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn495437.aspx for
    * more information)
    *
    * @param providerNamespace Required. The provider namespace.
    * @param extensionType Required. The extension type name.
    * @return The List Available Extensions operation response.
    */
    @Override
    public Future<HostedServiceListAvailableExtensionsResponse> listExtensionVersionsAsync(
            final String providerNamespace, final String extensionType) {
        return this.getClient().getExecutorService()
                .submit(new Callable<HostedServiceListAvailableExtensionsResponse>() {
                    @Override
                    public HostedServiceListAvailableExtensionsResponse call() throws Exception {
                        return listExtensionVersions(providerNamespace, extensionType);
                    }
                });
    }

    /**
    * The List Extension Versions operation lists the versions of an extension
    * that are available to add to a cloud service. In Azure, a process can
    * run as an extension of a cloud service. For example, Remote Desktop
    * Access or the Azure Diagnostics Agent can run as extensions to the cloud
    * service.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/dn495437.aspx for
    * more information)
    *
    * @param providerNamespace Required. The provider namespace.
    * @param extensionType Required. The extension type name.
    * @throws IOException Signals that an I/O exception of some sort has
    * occurred. This class is the general class of exceptions produced by
    * failed or interrupted I/O operations.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws ParserConfigurationException Thrown if there was a serious
    * configuration error with the document parser.
    * @throws SAXException Thrown if there was an error parsing the XML
    * response.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return The List Available Extensions operation response.
    */
    @Override
    public HostedServiceListAvailableExtensionsResponse listExtensionVersions(String providerNamespace,
            String extensionType)
            throws IOException, ServiceException, ParserConfigurationException, SAXException, URISyntaxException {
        // Validate
        if (providerNamespace == null) {
            throw new NullPointerException("providerNamespace");
        }
        if (extensionType == null) {
            throw new NullPointerException("extensionType");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("providerNamespace", providerNamespace);
            tracingParameters.put("extensionType", extensionType);
            CloudTracing.enter(invocationId, this, "listExtensionVersionsAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/extensions/";
        url = url + URLEncoder.encode(providerNamespace, "UTF-8");
        url = url + "/";
        url = url + URLEncoder.encode(extensionType, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpGet httpRequest = new HttpGet(url);

        // Set Headers
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, null, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            HostedServiceListAvailableExtensionsResponse result = null;
            // Deserialize Response
            if (statusCode == HttpStatus.SC_OK) {
                InputStream responseContent = httpResponse.getEntity().getContent();
                result = new HostedServiceListAvailableExtensionsResponse();
                DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
                documentBuilderFactory.setNamespaceAware(true);
                DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
                Document responseDoc = documentBuilder.parse(new BOMInputStream(responseContent));

                Element extensionImagesSequenceElement = XmlUtility.getElementByTagNameNS(responseDoc,
                        "http://schemas.microsoft.com/windowsazure", "ExtensionImages");
                if (extensionImagesSequenceElement != null) {
                    for (int i1 = 0; i1 < com.microsoft.windowsazure.core.utils.XmlUtility
                            .getElementsByTagNameNS(extensionImagesSequenceElement,
                                    "http://schemas.microsoft.com/windowsazure", "ExtensionImage")
                            .size(); i1 = i1 + 1) {
                        org.w3c.dom.Element extensionImagesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                .getElementsByTagNameNS(extensionImagesSequenceElement,
                                        "http://schemas.microsoft.com/windowsazure", "ExtensionImage")
                                .get(i1));
                        ExtensionImage extensionImageInstance = new ExtensionImage();
                        result.getExtensionImages().add(extensionImageInstance);

                        Element providerNameSpaceElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "ProviderNameSpace");
                        if (providerNameSpaceElement != null) {
                            String providerNameSpaceInstance;
                            providerNameSpaceInstance = providerNameSpaceElement.getTextContent();
                            extensionImageInstance.setProviderNameSpace(providerNameSpaceInstance);
                        }

                        Element typeElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Type");
                        if (typeElement != null) {
                            String typeInstance;
                            typeInstance = typeElement.getTextContent();
                            extensionImageInstance.setType(typeInstance);
                        }

                        Element versionElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Version");
                        if (versionElement != null) {
                            String versionInstance;
                            versionInstance = versionElement.getTextContent();
                            extensionImageInstance.setVersion(versionInstance);
                        }

                        Element labelElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Label");
                        if (labelElement != null) {
                            String labelInstance;
                            labelInstance = labelElement.getTextContent();
                            extensionImageInstance.setLabel(labelInstance);
                        }

                        Element hostingResourcesElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "HostingResources");
                        if (hostingResourcesElement != null) {
                            String hostingResourcesInstance;
                            hostingResourcesInstance = hostingResourcesElement.getTextContent();
                            extensionImageInstance.setHostingResources(hostingResourcesInstance);
                        }

                        Element mediaLinkElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "MediaLink");
                        if (mediaLinkElement != null) {
                            URI mediaLinkInstance;
                            mediaLinkInstance = new URI(mediaLinkElement.getTextContent());
                            extensionImageInstance.setMediaLink(mediaLinkInstance);
                        }

                        Element certificateElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Certificate");
                        if (certificateElement != null) {
                            ExtensionCertificateConfiguration certificateInstance = new ExtensionCertificateConfiguration();
                            extensionImageInstance.setCertificate(certificateInstance);

                            Element storeLocationElement = XmlUtility.getElementByTagNameNS(certificateElement,
                                    "http://schemas.microsoft.com/windowsazure", "StoreLocation");
                            if (storeLocationElement != null) {
                                String storeLocationInstance;
                                storeLocationInstance = storeLocationElement.getTextContent();
                                certificateInstance.setStoreLocation(storeLocationInstance);
                            }

                            Element storeNameElement = XmlUtility.getElementByTagNameNS(certificateElement,
                                    "http://schemas.microsoft.com/windowsazure", "StoreName");
                            if (storeNameElement != null) {
                                String storeNameInstance;
                                storeNameInstance = storeNameElement.getTextContent();
                                certificateInstance.setStoreName(storeNameInstance);
                            }

                            Element thumbprintRequiredElement = XmlUtility.getElementByTagNameNS(certificateElement,
                                    "http://schemas.microsoft.com/windowsazure", "ThumbprintRequired");
                            if (thumbprintRequiredElement != null
                                    && thumbprintRequiredElement.getTextContent() != null
                                    && !thumbprintRequiredElement.getTextContent().isEmpty()) {
                                boolean thumbprintRequiredInstance;
                                thumbprintRequiredInstance = DatatypeConverter
                                        .parseBoolean(thumbprintRequiredElement.getTextContent().toLowerCase());
                                certificateInstance.setThumbprintRequired(thumbprintRequiredInstance);
                            }

                            Element thumbprintAlgorithmElement = XmlUtility.getElementByTagNameNS(
                                    certificateElement, "http://schemas.microsoft.com/windowsazure",
                                    "ThumbprintAlgorithm");
                            if (thumbprintAlgorithmElement != null) {
                                String thumbprintAlgorithmInstance;
                                thumbprintAlgorithmInstance = thumbprintAlgorithmElement.getTextContent();
                                certificateInstance.setThumbprintAlgorithm(thumbprintAlgorithmInstance);
                            }
                        }

                        Element endpointsElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Endpoints");
                        if (endpointsElement != null) {
                            ExtensionEndpointConfiguration endpointsInstance = new ExtensionEndpointConfiguration();
                            extensionImageInstance.setExtensionEndpoints(endpointsInstance);

                            Element inputEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                    endpointsElement, "http://schemas.microsoft.com/windowsazure",
                                    "InputEndpoints");
                            if (inputEndpointsSequenceElement != null) {
                                for (int i2 = 0; i2 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(inputEndpointsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "InputEndpoint")
                                        .size(); i2 = i2 + 1) {
                                    org.w3c.dom.Element inputEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(inputEndpointsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "InputEndpoint")
                                            .get(i2));
                                    ExtensionEndpointConfiguration.InputEndpoint inputEndpointInstance = new ExtensionEndpointConfiguration.InputEndpoint();
                                    endpointsInstance.getInputEndpoints().add(inputEndpointInstance);

                                    Element nameElement = XmlUtility.getElementByTagNameNS(inputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                    if (nameElement != null) {
                                        String nameInstance;
                                        nameInstance = nameElement.getTextContent();
                                        inputEndpointInstance.setName(nameInstance);
                                    }

                                    Element protocolElement = XmlUtility.getElementByTagNameNS(
                                            inputEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Protocol");
                                    if (protocolElement != null) {
                                        String protocolInstance;
                                        protocolInstance = protocolElement.getTextContent();
                                        inputEndpointInstance.setProtocol(protocolInstance);
                                    }

                                    Element portElement = XmlUtility.getElementByTagNameNS(inputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Port");
                                    if (portElement != null) {
                                        int portInstance;
                                        portInstance = DatatypeConverter.parseInt(portElement.getTextContent());
                                        inputEndpointInstance.setPort(portInstance);
                                    }

                                    Element localPortElement = XmlUtility.getElementByTagNameNS(
                                            inputEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "LocalPort");
                                    if (localPortElement != null) {
                                        String localPortInstance;
                                        localPortInstance = localPortElement.getTextContent();
                                        inputEndpointInstance.setLocalPort(localPortInstance);
                                    }
                                }
                            }

                            Element internalEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                    endpointsElement, "http://schemas.microsoft.com/windowsazure",
                                    "InternalEndpoints");
                            if (internalEndpointsSequenceElement != null) {
                                for (int i3 = 0; i3 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(internalEndpointsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "InternalEndpoint")
                                        .size(); i3 = i3 + 1) {
                                    org.w3c.dom.Element internalEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(internalEndpointsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure", "InternalEndpoint")
                                            .get(i3));
                                    ExtensionEndpointConfiguration.InternalEndpoint internalEndpointInstance = new ExtensionEndpointConfiguration.InternalEndpoint();
                                    endpointsInstance.getInternalEndpoints().add(internalEndpointInstance);

                                    Element nameElement2 = XmlUtility.getElementByTagNameNS(
                                            internalEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Name");
                                    if (nameElement2 != null) {
                                        String nameInstance2;
                                        nameInstance2 = nameElement2.getTextContent();
                                        internalEndpointInstance.setName(nameInstance2);
                                    }

                                    Element protocolElement2 = XmlUtility.getElementByTagNameNS(
                                            internalEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Protocol");
                                    if (protocolElement2 != null) {
                                        String protocolInstance2;
                                        protocolInstance2 = protocolElement2.getTextContent();
                                        internalEndpointInstance.setProtocol(protocolInstance2);
                                    }

                                    Element portElement2 = XmlUtility.getElementByTagNameNS(
                                            internalEndpointsElement, "http://schemas.microsoft.com/windowsazure",
                                            "Port");
                                    if (portElement2 != null) {
                                        int portInstance2;
                                        portInstance2 = DatatypeConverter.parseInt(portElement2.getTextContent());
                                        internalEndpointInstance.setPort(portInstance2);
                                    }
                                }
                            }

                            Element instanceInputEndpointsSequenceElement = XmlUtility.getElementByTagNameNS(
                                    endpointsElement, "http://schemas.microsoft.com/windowsazure",
                                    "InstanceInputEndpoints");
                            if (instanceInputEndpointsSequenceElement != null) {
                                for (int i4 = 0; i4 < com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(instanceInputEndpointsSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure",
                                                "InstanceInputEndpoint")
                                        .size(); i4 = i4 + 1) {
                                    org.w3c.dom.Element instanceInputEndpointsElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                            .getElementsByTagNameNS(instanceInputEndpointsSequenceElement,
                                                    "http://schemas.microsoft.com/windowsazure",
                                                    "InstanceInputEndpoint")
                                            .get(i4));
                                    ExtensionEndpointConfiguration.InstanceInputEndpoint instanceInputEndpointInstance = new ExtensionEndpointConfiguration.InstanceInputEndpoint();
                                    endpointsInstance.getInstanceInputEndpoints()
                                            .add(instanceInputEndpointInstance);

                                    Element nameElement3 = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Name");
                                    if (nameElement3 != null) {
                                        String nameInstance3;
                                        nameInstance3 = nameElement3.getTextContent();
                                        instanceInputEndpointInstance.setName(nameInstance3);
                                    }

                                    Element protocolElement3 = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "Protocol");
                                    if (protocolElement3 != null) {
                                        String protocolInstance3;
                                        protocolInstance3 = protocolElement3.getTextContent();
                                        instanceInputEndpointInstance.setProtocol(protocolInstance3);
                                    }

                                    Element localPortElement2 = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "LocalPort");
                                    if (localPortElement2 != null) {
                                        String localPortInstance2;
                                        localPortInstance2 = localPortElement2.getTextContent();
                                        instanceInputEndpointInstance.setLocalPort(localPortInstance2);
                                    }

                                    Element fixedPortMinElement = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "FixedPortMin");
                                    if (fixedPortMinElement != null) {
                                        int fixedPortMinInstance;
                                        fixedPortMinInstance = DatatypeConverter
                                                .parseInt(fixedPortMinElement.getTextContent());
                                        instanceInputEndpointInstance.setFixedPortMin(fixedPortMinInstance);
                                    }

                                    Element fixedPortMaxElement = XmlUtility.getElementByTagNameNS(
                                            instanceInputEndpointsElement,
                                            "http://schemas.microsoft.com/windowsazure", "FixedPortMax");
                                    if (fixedPortMaxElement != null) {
                                        int fixedPortMaxInstance;
                                        fixedPortMaxInstance = DatatypeConverter
                                                .parseInt(fixedPortMaxElement.getTextContent());
                                        instanceInputEndpointInstance.setFixedPortMax(fixedPortMaxInstance);
                                    }
                                }
                            }
                        }

                        Element publicConfigurationSchemaElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "PublicConfigurationSchema");
                        if (publicConfigurationSchemaElement != null) {
                            String publicConfigurationSchemaInstance;
                            publicConfigurationSchemaInstance = publicConfigurationSchemaElement
                                    .getTextContent() != null ? new String(
                                            Base64.decode(publicConfigurationSchemaElement.getTextContent()))
                                            : null;
                            extensionImageInstance.setPublicConfigurationSchema(publicConfigurationSchemaInstance);
                        }

                        Element privateConfigurationSchemaElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "PrivateConfigurationSchema");
                        if (privateConfigurationSchemaElement != null) {
                            String privateConfigurationSchemaInstance;
                            privateConfigurationSchemaInstance = privateConfigurationSchemaElement
                                    .getTextContent() != null ? new String(
                                            Base64.decode(privateConfigurationSchemaElement.getTextContent()))
                                            : null;
                            extensionImageInstance
                                    .setPrivateConfigurationSchema(privateConfigurationSchemaInstance);
                        }

                        Element descriptionElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Description");
                        if (descriptionElement != null) {
                            String descriptionInstance;
                            descriptionInstance = descriptionElement.getTextContent();
                            extensionImageInstance.setDescription(descriptionInstance);
                        }

                        Element publisherNameElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "PublisherName");
                        if (publisherNameElement != null) {
                            String publisherNameInstance;
                            publisherNameInstance = publisherNameElement.getTextContent();
                            extensionImageInstance.setPublisherName(publisherNameInstance);
                        }

                        Element publishedDateElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "PublishedDate");
                        if (publishedDateElement != null && publishedDateElement.getTextContent() != null
                                && !publishedDateElement.getTextContent().isEmpty()) {
                            Calendar publishedDateInstance;
                            publishedDateInstance = DatatypeConverter
                                    .parseDateTime(publishedDateElement.getTextContent());
                            extensionImageInstance.setPublishedDate(publishedDateInstance);
                        }

                        Element localResourcesSequenceElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "LocalResources");
                        if (localResourcesSequenceElement != null) {
                            for (int i5 = 0; i5 < com.microsoft.windowsazure.core.utils.XmlUtility
                                    .getElementsByTagNameNS(localResourcesSequenceElement,
                                            "http://schemas.microsoft.com/windowsazure", "LocalResource")
                                    .size(); i5 = i5 + 1) {
                                org.w3c.dom.Element localResourcesElement = ((org.w3c.dom.Element) com.microsoft.windowsazure.core.utils.XmlUtility
                                        .getElementsByTagNameNS(localResourcesSequenceElement,
                                                "http://schemas.microsoft.com/windowsazure", "LocalResource")
                                        .get(i5));
                                ExtensionLocalResourceConfiguration localResourceInstance = new ExtensionLocalResourceConfiguration();
                                extensionImageInstance.getLocalResources().add(localResourceInstance);

                                Element nameElement4 = XmlUtility.getElementByTagNameNS(localResourcesElement,
                                        "http://schemas.microsoft.com/windowsazure", "Name");
                                if (nameElement4 != null) {
                                    String nameInstance4;
                                    nameInstance4 = nameElement4.getTextContent();
                                    localResourceInstance.setName(nameInstance4);
                                }

                                Element sizeInMBElement = XmlUtility.getElementByTagNameNS(localResourcesElement,
                                        "http://schemas.microsoft.com/windowsazure", "SizeInMB");
                                if (sizeInMBElement != null && sizeInMBElement.getTextContent() != null
                                        && !sizeInMBElement.getTextContent().isEmpty()) {
                                    int sizeInMBInstance;
                                    sizeInMBInstance = DatatypeConverter.parseInt(sizeInMBElement.getTextContent());
                                    localResourceInstance.setSizeInMB(sizeInMBInstance);
                                }
                            }
                        }

                        Element blockRoleUponFailureElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "BlockRoleUponFailure");
                        if (blockRoleUponFailureElement != null
                                && blockRoleUponFailureElement.getTextContent() != null
                                && !blockRoleUponFailureElement.getTextContent().isEmpty()) {
                            boolean blockRoleUponFailureInstance;
                            blockRoleUponFailureInstance = DatatypeConverter
                                    .parseBoolean(blockRoleUponFailureElement.getTextContent().toLowerCase());
                            extensionImageInstance.setBlockRoleUponFailure(blockRoleUponFailureInstance);
                        }

                        Element isInternalExtensionElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "IsInternalExtension");
                        if (isInternalExtensionElement != null
                                && isInternalExtensionElement.getTextContent() != null
                                && !isInternalExtensionElement.getTextContent().isEmpty()) {
                            boolean isInternalExtensionInstance;
                            isInternalExtensionInstance = DatatypeConverter
                                    .parseBoolean(isInternalExtensionElement.getTextContent().toLowerCase());
                            extensionImageInstance.setIsInternalExtension(isInternalExtensionInstance);
                        }

                        Element sampleConfigElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "SampleConfig");
                        if (sampleConfigElement != null) {
                            String sampleConfigInstance;
                            sampleConfigInstance = sampleConfigElement.getTextContent() != null
                                    ? new String(Base64.decode(sampleConfigElement.getTextContent()))
                                    : null;
                            extensionImageInstance.setSampleConfig(sampleConfigInstance);
                        }

                        Element replicationCompletedElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "ReplicationCompleted");
                        if (replicationCompletedElement != null
                                && replicationCompletedElement.getTextContent() != null
                                && !replicationCompletedElement.getTextContent().isEmpty()) {
                            boolean replicationCompletedInstance;
                            replicationCompletedInstance = DatatypeConverter
                                    .parseBoolean(replicationCompletedElement.getTextContent().toLowerCase());
                            extensionImageInstance.setReplicationCompleted(replicationCompletedInstance);
                        }

                        Element eulaElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Eula");
                        if (eulaElement != null) {
                            URI eulaInstance;
                            eulaInstance = new URI(eulaElement.getTextContent());
                            extensionImageInstance.setEula(eulaInstance);
                        }

                        Element privacyUriElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "PrivacyUri");
                        if (privacyUriElement != null) {
                            URI privacyUriInstance;
                            privacyUriInstance = new URI(privacyUriElement.getTextContent());
                            extensionImageInstance.setPrivacyUri(privacyUriInstance);
                        }

                        Element homepageUriElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "HomepageUri");
                        if (homepageUriElement != null) {
                            URI homepageUriInstance;
                            homepageUriInstance = new URI(homepageUriElement.getTextContent());
                            extensionImageInstance.setHomepageUri(homepageUriInstance);
                        }

                        Element isJsonExtensionElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "IsJsonExtension");
                        if (isJsonExtensionElement != null && isJsonExtensionElement.getTextContent() != null
                                && !isJsonExtensionElement.getTextContent().isEmpty()) {
                            boolean isJsonExtensionInstance;
                            isJsonExtensionInstance = DatatypeConverter
                                    .parseBoolean(isJsonExtensionElement.getTextContent().toLowerCase());
                            extensionImageInstance.setIsJsonExtension(isJsonExtensionInstance);
                        }

                        Element disallowMajorVersionUpgradeElement = XmlUtility.getElementByTagNameNS(
                                extensionImagesElement, "http://schemas.microsoft.com/windowsazure",
                                "DisallowMajorVersionUpgrade");
                        if (disallowMajorVersionUpgradeElement != null
                                && disallowMajorVersionUpgradeElement.getTextContent() != null
                                && !disallowMajorVersionUpgradeElement.getTextContent().isEmpty()) {
                            boolean disallowMajorVersionUpgradeInstance;
                            disallowMajorVersionUpgradeInstance = DatatypeConverter.parseBoolean(
                                    disallowMajorVersionUpgradeElement.getTextContent().toLowerCase());
                            extensionImageInstance
                                    .setDisallowMajorVersionUpgrade(disallowMajorVersionUpgradeInstance);
                        }

                        Element supportedOSElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "SupportedOS");
                        if (supportedOSElement != null) {
                            String supportedOSInstance;
                            supportedOSInstance = supportedOSElement.getTextContent();
                            extensionImageInstance.setSupportedOS(supportedOSInstance);
                        }

                        Element companyNameElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "CompanyName");
                        if (companyNameElement != null) {
                            String companyNameInstance;
                            companyNameInstance = companyNameElement.getTextContent();
                            extensionImageInstance.setCompanyName(companyNameInstance);
                        }

                        Element regionsElement = XmlUtility.getElementByTagNameNS(extensionImagesElement,
                                "http://schemas.microsoft.com/windowsazure", "Regions");
                        if (regionsElement != null) {
                            String regionsInstance;
                            regionsInstance = regionsElement.getTextContent();
                            extensionImageInstance.setRegions(regionsInstance);
                        }
                    }
                }

            }
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }

    /**
    * The Update Hosted Service operation can update the label or description
    * of a cloud service in Azure.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/gg441303.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param parameters Required. Parameters supplied to the Update Hosted
    * Service operation.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public Future<OperationResponse> updateAsync(final String serviceName,
            final HostedServiceUpdateParameters parameters) {
        return this.getClient().getExecutorService().submit(new Callable<OperationResponse>() {
            @Override
            public OperationResponse call() throws Exception {
                return update(serviceName, parameters);
            }
        });
    }

    /**
    * The Update Hosted Service operation can update the label or description
    * of a cloud service in Azure.  (see
    * http://msdn.microsoft.com/en-us/library/windowsazure/gg441303.aspx for
    * more information)
    *
    * @param serviceName Required. The name of the cloud service.
    * @param parameters Required. Parameters supplied to the Update Hosted
    * Service operation.
    * @throws InterruptedException Thrown when a thread is waiting, sleeping,
    * or otherwise occupied, and the thread is interrupted, either before or
    * during the activity. Occasionally a method may wish to test whether the
    * current thread has been interrupted, and if so, to immediately throw
    * this exception. The following code can be used to achieve this effect:
    * @throws ExecutionException Thrown when attempting to retrieve the result
    * of a task that aborted by throwing an exception. This exception can be
    * inspected using the Throwable.getCause() method.
    * @throws ServiceException Thrown if the server returned an error for the
    * request.
    * @throws IOException Thrown if there was an error setting up tracing for
    * the request.
    * @throws ParserConfigurationException Thrown if there was an error
    * configuring the parser for the response body.
    * @throws SAXException Thrown if there was an error parsing the response
    * body.
    * @throws TransformerException Thrown if there was an error creating the
    * DOM transformer.
    * @throws ServiceException Thrown if an unexpected response is found.
    * @throws URISyntaxException Thrown if there was an error parsing a URI in
    * the response.
    * @return A standard service response including an HTTP status code and
    * request ID.
    */
    @Override
    public OperationResponse update(String serviceName, HostedServiceUpdateParameters parameters)
            throws InterruptedException, ExecutionException, ServiceException, IOException,
            ParserConfigurationException, SAXException, TransformerException, URISyntaxException {
        // Validate
        if (serviceName == null) {
            throw new NullPointerException("serviceName");
        }
        // TODO: Validate serviceName is a valid DNS name.
        if (parameters == null) {
            throw new NullPointerException("parameters");
        }
        if (parameters.getDescription() != null && parameters.getDescription().length() > 1024) {
            throw new IllegalArgumentException("parameters.Description");
        }

        // Tracing
        boolean shouldTrace = CloudTracing.getIsEnabled();
        String invocationId = null;
        if (shouldTrace) {
            invocationId = Long.toString(CloudTracing.getNextInvocationId());
            HashMap<String, Object> tracingParameters = new HashMap<String, Object>();
            tracingParameters.put("serviceName", serviceName);
            tracingParameters.put("parameters", parameters);
            CloudTracing.enter(invocationId, this, "updateAsync", tracingParameters);
        }

        // Construct URL
        String url = "";
        url = url + "/";
        if (this.getClient().getCredentials().getSubscriptionId() != null) {
            url = url + URLEncoder.encode(this.getClient().getCredentials().getSubscriptionId(), "UTF-8");
        }
        url = url + "/services/hostedservices/";
        url = url + URLEncoder.encode(serviceName, "UTF-8");
        String baseUrl = this.getClient().getBaseUri().toString();
        // Trim '/' character from the end of baseUrl and beginning of url.
        if (baseUrl.charAt(baseUrl.length() - 1) == '/') {
            baseUrl = baseUrl.substring(0, (baseUrl.length() - 1) + 0);
        }
        if (url.charAt(0) == '/') {
            url = url.substring(1);
        }
        url = baseUrl + "/" + url;
        url = url.replace(" ", "%20");

        // Create HTTP transport objects
        HttpPut httpRequest = new HttpPut(url);

        // Set Headers
        httpRequest.setHeader("Content-Type", "application/xml");
        httpRequest.setHeader("x-ms-version", "2015-04-01");

        // Serialize Request
        String requestContent = null;
        DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
        Document requestDoc = documentBuilder.newDocument();

        Element updateHostedServiceElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                "UpdateHostedService");
        requestDoc.appendChild(updateHostedServiceElement);

        if (parameters.getLabel() != null) {
            Element labelElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure", "Label");
            labelElement.appendChild(requestDoc.createTextNode(Base64.encode(parameters.getLabel().getBytes())));
            updateHostedServiceElement.appendChild(labelElement);
        }

        if (parameters.getDescription() != null) {
            Element descriptionElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "Description");
            descriptionElement.appendChild(requestDoc.createTextNode(parameters.getDescription()));
            updateHostedServiceElement.appendChild(descriptionElement);
        }

        if (parameters.getReverseDnsFqdn() != null) {
            Element reverseDnsFqdnElement = requestDoc.createElementNS("http://schemas.microsoft.com/windowsazure",
                    "ReverseDnsFqdn");
            reverseDnsFqdnElement.appendChild(requestDoc.createTextNode(parameters.getReverseDnsFqdn()));
            updateHostedServiceElement.appendChild(reverseDnsFqdnElement);
        }

        if (parameters.getExtendedProperties() != null) {
            if (parameters.getExtendedProperties() instanceof LazyCollection == false
                    || ((LazyCollection) parameters.getExtendedProperties()).isInitialized()) {
                Element extendedPropertiesDictionaryElement = requestDoc
                        .createElementNS("http://schemas.microsoft.com/windowsazure", "ExtendedProperties");
                for (Map.Entry<String, String> entry : parameters.getExtendedProperties().entrySet()) {
                    String extendedPropertiesKey = entry.getKey();
                    String extendedPropertiesValue = entry.getValue();
                    Element extendedPropertiesElement = requestDoc
                            .createElementNS("http://schemas.microsoft.com/windowsazure", "ExtendedProperty");
                    extendedPropertiesDictionaryElement.appendChild(extendedPropertiesElement);

                    Element extendedPropertiesKeyElement = requestDoc
                            .createElementNS("http://schemas.microsoft.com/windowsazure", "Name");
                    extendedPropertiesKeyElement.appendChild(requestDoc.createTextNode(extendedPropertiesKey));
                    extendedPropertiesElement.appendChild(extendedPropertiesKeyElement);

                    Element extendedPropertiesValueElement = requestDoc
                            .createElementNS("http://schemas.microsoft.com/windowsazure", "Value");
                    extendedPropertiesValueElement.appendChild(requestDoc.createTextNode(extendedPropertiesValue));
                    extendedPropertiesElement.appendChild(extendedPropertiesValueElement);
                }
                updateHostedServiceElement.appendChild(extendedPropertiesDictionaryElement);
            }
        }

        DOMSource domSource = new DOMSource(requestDoc);
        StringWriter stringWriter = new StringWriter();
        StreamResult streamResult = new StreamResult(stringWriter);
        TransformerFactory transformerFactory = TransformerFactory.newInstance();
        Transformer transformer = transformerFactory.newTransformer();
        transformer.transform(domSource, streamResult);
        requestContent = stringWriter.toString();
        StringEntity entity = new StringEntity(requestContent);
        httpRequest.setEntity(entity);
        httpRequest.setHeader("Content-Type", "application/xml");

        // Send Request
        HttpResponse httpResponse = null;
        try {
            if (shouldTrace) {
                CloudTracing.sendRequest(invocationId, httpRequest);
            }
            httpResponse = this.getClient().getHttpClient().execute(httpRequest);
            if (shouldTrace) {
                CloudTracing.receiveResponse(invocationId, httpResponse);
            }
            int statusCode = httpResponse.getStatusLine().getStatusCode();
            if (statusCode != HttpStatus.SC_OK) {
                ServiceException ex = ServiceException.createFromXml(httpRequest, requestContent, httpResponse,
                        httpResponse.getEntity());
                if (shouldTrace) {
                    CloudTracing.error(invocationId, ex);
                }
                throw ex;
            }

            // Create Result
            OperationResponse result = null;
            // Deserialize Response
            result = new OperationResponse();
            result.setStatusCode(statusCode);
            if (httpResponse.getHeaders("x-ms-request-id").length > 0) {
                result.setRequestId(httpResponse.getFirstHeader("x-ms-request-id").getValue());
            }

            if (shouldTrace) {
                CloudTracing.exit(invocationId, result);
            }
            return result;
        } finally {
            if (httpResponse != null && httpResponse.getEntity() != null) {
                httpResponse.getEntity().getContent().close();
            }
        }
    }
}