public Request<CancelJobRequest> marshall(CancelJobRequest cancelJobRequest) {

    if (cancelJobRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<CancelJobRequest> request =
        new DefaultRequest<CancelJobRequest>(cancelJobRequest, "AmazonSnowball");
    request.addHeader("X-Amz-Target", "AWSIESnowballJobManagementService.CancelJob");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (cancelJobRequest.getJobId() != null) {
        jsonGenerator.writeFieldName("JobId").writeValue(cancelJobRequest.getJobId());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<LookupEventsRequest> marshall(LookupEventsRequest lookupEventsRequest) {

    if (lookupEventsRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<LookupEventsRequest> request =
        new DefaultRequest<LookupEventsRequest>(lookupEventsRequest, "AWSCloudTrail");
    request.addHeader(
        "X-Amz-Target", "com.amazonaws.cloudtrail.v20131101.CloudTrail_20131101.LookupEvents");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      com.amazonaws.internal.SdkInternalList<LookupAttribute> lookupAttributesList =
          (com.amazonaws.internal.SdkInternalList<LookupAttribute>)
              lookupEventsRequest.getLookupAttributes();
      if (!lookupAttributesList.isEmpty() || !lookupAttributesList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("LookupAttributes");
        jsonGenerator.writeStartArray();
        for (LookupAttribute lookupAttributesListValue : lookupAttributesList) {
          if (lookupAttributesListValue != null) {

            LookupAttributeJsonMarshaller.getInstance()
                .marshall(lookupAttributesListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }
      if (lookupEventsRequest.getStartTime() != null) {
        jsonGenerator.writeFieldName("StartTime").writeValue(lookupEventsRequest.getStartTime());
      }
      if (lookupEventsRequest.getEndTime() != null) {
        jsonGenerator.writeFieldName("EndTime").writeValue(lookupEventsRequest.getEndTime());
      }
      if (lookupEventsRequest.getMaxResults() != null) {
        jsonGenerator.writeFieldName("MaxResults").writeValue(lookupEventsRequest.getMaxResults());
      }
      if (lookupEventsRequest.getNextToken() != null) {
        jsonGenerator.writeFieldName("NextToken").writeValue(lookupEventsRequest.getNextToken());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<UpdateByteMatchSetRequest> marshall(
      UpdateByteMatchSetRequest updateByteMatchSetRequest) {

    if (updateByteMatchSetRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<UpdateByteMatchSetRequest> request =
        new DefaultRequest<UpdateByteMatchSetRequest>(updateByteMatchSetRequest, "AWSWAF");
    request.addHeader("X-Amz-Target", "AWSWAF_20150824.UpdateByteMatchSet");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (updateByteMatchSetRequest.getByteMatchSetId() != null) {
        jsonGenerator
            .writeFieldName("ByteMatchSetId")
            .writeValue(updateByteMatchSetRequest.getByteMatchSetId());
      }
      if (updateByteMatchSetRequest.getChangeToken() != null) {
        jsonGenerator
            .writeFieldName("ChangeToken")
            .writeValue(updateByteMatchSetRequest.getChangeToken());
      }

      java.util.List<ByteMatchSetUpdate> updatesList = updateByteMatchSetRequest.getUpdates();
      if (updatesList != null) {
        jsonGenerator.writeFieldName("Updates");
        jsonGenerator.writeStartArray();
        for (ByteMatchSetUpdate updatesListValue : updatesList) {
          if (updatesListValue != null) {

            ByteMatchSetUpdateJsonMarshaller.getInstance()
                .marshall(updatesListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DeleteTagsRequest> marshall(DeleteTagsRequest deleteTagsRequest) {

    if (deleteTagsRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DeleteTagsRequest> request =
        new DefaultRequest<DeleteTagsRequest>(deleteTagsRequest, "AWSApplicationDiscovery");
    request.addHeader("X-Amz-Target", "AWSPoseidonService_V2015_11_01.DeleteTags");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      java.util.List<String> configurationIdsList = deleteTagsRequest.getConfigurationIds();
      if (configurationIdsList != null) {
        jsonGenerator.writeFieldName("configurationIds");
        jsonGenerator.writeStartArray();
        for (String configurationIdsListValue : configurationIdsList) {
          if (configurationIdsListValue != null) {
            jsonGenerator.writeValue(configurationIdsListValue);
          }
        }
        jsonGenerator.writeEndArray();
      }

      java.util.List<Tag> tagsList = deleteTagsRequest.getTags();
      if (tagsList != null) {
        jsonGenerator.writeFieldName("tags");
        jsonGenerator.writeStartArray();
        for (Tag tagsListValue : tagsList) {
          if (tagsListValue != null) {

            TagJsonMarshaller.getInstance().marshall(tagsListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DescribeProvisioningParametersRequest> marshall(
      DescribeProvisioningParametersRequest describeProvisioningParametersRequest) {

    if (describeProvisioningParametersRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DescribeProvisioningParametersRequest> request =
        new DefaultRequest<DescribeProvisioningParametersRequest>(
            describeProvisioningParametersRequest, "AWSServiceCatalog");
    request.addHeader("X-Amz-Target", "AWS242ServiceCatalogService.DescribeProvisioningParameters");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (describeProvisioningParametersRequest.getAcceptLanguage() != null) {
        jsonGenerator
            .writeFieldName("AcceptLanguage")
            .writeValue(describeProvisioningParametersRequest.getAcceptLanguage());
      }
      if (describeProvisioningParametersRequest.getProductId() != null) {
        jsonGenerator
            .writeFieldName("ProductId")
            .writeValue(describeProvisioningParametersRequest.getProductId());
      }
      if (describeProvisioningParametersRequest.getProvisioningArtifactId() != null) {
        jsonGenerator
            .writeFieldName("ProvisioningArtifactId")
            .writeValue(describeProvisioningParametersRequest.getProvisioningArtifactId());
      }
      if (describeProvisioningParametersRequest.getPathId() != null) {
        jsonGenerator
            .writeFieldName("PathId")
            .writeValue(describeProvisioningParametersRequest.getPathId());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<SetLoadBasedAutoScalingRequest> marshall(
      SetLoadBasedAutoScalingRequest setLoadBasedAutoScalingRequest) {

    if (setLoadBasedAutoScalingRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<SetLoadBasedAutoScalingRequest> request =
        new DefaultRequest<SetLoadBasedAutoScalingRequest>(
            setLoadBasedAutoScalingRequest, "AWSOpsWorks");
    request.addHeader("X-Amz-Target", "OpsWorks_20130218.SetLoadBasedAutoScaling");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (setLoadBasedAutoScalingRequest.getLayerId() != null) {
        jsonGenerator
            .writeFieldName("LayerId")
            .writeValue(setLoadBasedAutoScalingRequest.getLayerId());
      }
      if (setLoadBasedAutoScalingRequest.getEnable() != null) {
        jsonGenerator
            .writeFieldName("Enable")
            .writeValue(setLoadBasedAutoScalingRequest.getEnable());
      }
      if (setLoadBasedAutoScalingRequest.getUpScaling() != null) {
        jsonGenerator.writeFieldName("UpScaling");
        AutoScalingThresholdsJsonMarshaller.getInstance()
            .marshall(setLoadBasedAutoScalingRequest.getUpScaling(), jsonGenerator);
      }
      if (setLoadBasedAutoScalingRequest.getDownScaling() != null) {
        jsonGenerator.writeFieldName("DownScaling");
        AutoScalingThresholdsJsonMarshaller.getInstance()
            .marshall(setLoadBasedAutoScalingRequest.getDownScaling(), jsonGenerator);
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<MergeDeveloperIdentitiesRequest> marshall(
      MergeDeveloperIdentitiesRequest mergeDeveloperIdentitiesRequest) {

    if (mergeDeveloperIdentitiesRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<MergeDeveloperIdentitiesRequest> request =
        new DefaultRequest<MergeDeveloperIdentitiesRequest>(
            mergeDeveloperIdentitiesRequest, "AmazonCognitoIdentity");
    request.addHeader("X-Amz-Target", "AWSCognitoIdentityService.MergeDeveloperIdentities");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (mergeDeveloperIdentitiesRequest.getSourceUserIdentifier() != null) {
        jsonGenerator
            .writeFieldName("SourceUserIdentifier")
            .writeValue(mergeDeveloperIdentitiesRequest.getSourceUserIdentifier());
      }
      if (mergeDeveloperIdentitiesRequest.getDestinationUserIdentifier() != null) {
        jsonGenerator
            .writeFieldName("DestinationUserIdentifier")
            .writeValue(mergeDeveloperIdentitiesRequest.getDestinationUserIdentifier());
      }
      if (mergeDeveloperIdentitiesRequest.getDeveloperProviderName() != null) {
        jsonGenerator
            .writeFieldName("DeveloperProviderName")
            .writeValue(mergeDeveloperIdentitiesRequest.getDeveloperProviderName());
      }
      if (mergeDeveloperIdentitiesRequest.getIdentityPoolId() != null) {
        jsonGenerator
            .writeFieldName("IdentityPoolId")
            .writeValue(mergeDeveloperIdentitiesRequest.getIdentityPoolId());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<UpdateServiceRequest> marshall(UpdateServiceRequest updateServiceRequest) {

    if (updateServiceRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<UpdateServiceRequest> request =
        new DefaultRequest<UpdateServiceRequest>(updateServiceRequest, "AmazonECS");
    request.addHeader("X-Amz-Target", "AmazonEC2ContainerServiceV20141113.UpdateService");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (updateServiceRequest.getCluster() != null) {
        jsonGenerator.writeFieldName("cluster").writeValue(updateServiceRequest.getCluster());
      }
      if (updateServiceRequest.getService() != null) {
        jsonGenerator.writeFieldName("service").writeValue(updateServiceRequest.getService());
      }
      if (updateServiceRequest.getDesiredCount() != null) {
        jsonGenerator
            .writeFieldName("desiredCount")
            .writeValue(updateServiceRequest.getDesiredCount());
      }
      if (updateServiceRequest.getTaskDefinition() != null) {
        jsonGenerator
            .writeFieldName("taskDefinition")
            .writeValue(updateServiceRequest.getTaskDefinition());
      }
      if (updateServiceRequest.getDeploymentConfiguration() != null) {
        jsonGenerator.writeFieldName("deploymentConfiguration");
        DeploymentConfigurationJsonMarshaller.getInstance()
            .marshall(updateServiceRequest.getDeploymentConfiguration(), jsonGenerator);
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DescribeEventTopicsRequest> marshall(
      DescribeEventTopicsRequest describeEventTopicsRequest) {

    if (describeEventTopicsRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DescribeEventTopicsRequest> request =
        new DefaultRequest<DescribeEventTopicsRequest>(
            describeEventTopicsRequest, "AWSDirectoryService");
    request.addHeader("X-Amz-Target", "DirectoryService_20150416.DescribeEventTopics");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (describeEventTopicsRequest.getDirectoryId() != null) {
        jsonGenerator
            .writeFieldName("DirectoryId")
            .writeValue(describeEventTopicsRequest.getDirectoryId());
      }

      com.amazonaws.internal.SdkInternalList<String> topicNamesList =
          (com.amazonaws.internal.SdkInternalList<String>)
              describeEventTopicsRequest.getTopicNames();
      if (!topicNamesList.isEmpty() || !topicNamesList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("TopicNames");
        jsonGenerator.writeStartArray();
        for (String topicNamesListValue : topicNamesList) {
          if (topicNamesListValue != null) {
            jsonGenerator.writeValue(topicNamesListValue);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<BatchGetImageRequest> marshall(BatchGetImageRequest batchGetImageRequest) {

    if (batchGetImageRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<BatchGetImageRequest> request =
        new DefaultRequest<BatchGetImageRequest>(batchGetImageRequest, "AmazonECR");
    request.addHeader("X-Amz-Target", "AmazonEC2ContainerRegistry_V20150921.BatchGetImage");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (batchGetImageRequest.getRegistryId() != null) {
        jsonGenerator.writeFieldName("registryId").writeValue(batchGetImageRequest.getRegistryId());
      }
      if (batchGetImageRequest.getRepositoryName() != null) {
        jsonGenerator
            .writeFieldName("repositoryName")
            .writeValue(batchGetImageRequest.getRepositoryName());
      }

      java.util.List<ImageIdentifier> imageIdsList = batchGetImageRequest.getImageIds();
      if (imageIdsList != null) {
        jsonGenerator.writeFieldName("imageIds");
        jsonGenerator.writeStartArray();
        for (ImageIdentifier imageIdsListValue : imageIdsList) {
          if (imageIdsListValue != null) {

            ImageIdentifierJsonMarshaller.getInstance().marshall(imageIdsListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<SetTaskStatusRequest> marshall(SetTaskStatusRequest setTaskStatusRequest) {

    if (setTaskStatusRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<SetTaskStatusRequest> request =
        new DefaultRequest<SetTaskStatusRequest>(setTaskStatusRequest, "DataPipeline");
    request.addHeader("X-Amz-Target", "DataPipeline.SetTaskStatus");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (setTaskStatusRequest.getTaskId() != null) {
        jsonGenerator.writeFieldName("taskId").writeValue(setTaskStatusRequest.getTaskId());
      }
      if (setTaskStatusRequest.getTaskStatus() != null) {
        jsonGenerator.writeFieldName("taskStatus").writeValue(setTaskStatusRequest.getTaskStatus());
      }
      if (setTaskStatusRequest.getErrorId() != null) {
        jsonGenerator.writeFieldName("errorId").writeValue(setTaskStatusRequest.getErrorId());
      }
      if (setTaskStatusRequest.getErrorMessage() != null) {
        jsonGenerator
            .writeFieldName("errorMessage")
            .writeValue(setTaskStatusRequest.getErrorMessage());
      }
      if (setTaskStatusRequest.getErrorStackTrace() != null) {
        jsonGenerator
            .writeFieldName("errorStackTrace")
            .writeValue(setTaskStatusRequest.getErrorStackTrace());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<RespondActivityTaskFailedRequest> marshall(
      RespondActivityTaskFailedRequest respondActivityTaskFailedRequest) {

    if (respondActivityTaskFailedRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<RespondActivityTaskFailedRequest> request =
        new DefaultRequest<RespondActivityTaskFailedRequest>(
            respondActivityTaskFailedRequest, "AmazonSimpleWorkflow");
    request.addHeader("X-Amz-Target", "SimpleWorkflowService.RespondActivityTaskFailed");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (respondActivityTaskFailedRequest.getTaskToken() != null) {
        jsonGenerator
            .writeFieldName("taskToken")
            .writeValue(respondActivityTaskFailedRequest.getTaskToken());
      }
      if (respondActivityTaskFailedRequest.getReason() != null) {
        jsonGenerator
            .writeFieldName("reason")
            .writeValue(respondActivityTaskFailedRequest.getReason());
      }
      if (respondActivityTaskFailedRequest.getDetails() != null) {
        jsonGenerator
            .writeFieldName("details")
            .writeValue(respondActivityTaskFailedRequest.getDetails());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<GetThingShadowRequest> marshall(GetThingShadowRequest getThingShadowRequest) {

    if (getThingShadowRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<GetThingShadowRequest> request =
        new DefaultRequest<GetThingShadowRequest>(getThingShadowRequest, "AWSIotData");

    request.setHttpMethod(HttpMethodName.GET);

    String uriResourcePath = "/things/{thingName}/shadow";

    uriResourcePath =
        uriResourcePath.replace(
            "{thingName}",
            (getThingShadowRequest.getThingName() != null)
                ? SdkHttpUtils.urlEncode(
                    StringUtils.fromString(getThingShadowRequest.getThingName()), false)
                : "");
    request.setResourcePath(uriResourcePath);

    request.setContent(new ByteArrayInputStream(new byte[0]));
    if (!request.getHeaders().containsKey("Content-Type")) {
      request.addHeader("Content-Type", protocolFactory.getContentType());
    }

    return request;
  }
  public Request<DescribeEcsClustersRequest> marshall(
      DescribeEcsClustersRequest describeEcsClustersRequest) {

    if (describeEcsClustersRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DescribeEcsClustersRequest> request =
        new DefaultRequest<DescribeEcsClustersRequest>(describeEcsClustersRequest, "AWSOpsWorks");
    request.addHeader("X-Amz-Target", "OpsWorks_20130218.DescribeEcsClusters");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator =
          SdkJsonProtocolFactory.createWriter(false, "1.1");

      jsonGenerator.writeStartObject();

      com.amazonaws.internal.SdkInternalList<String> ecsClusterArnsList =
          (com.amazonaws.internal.SdkInternalList<String>)
              describeEcsClustersRequest.getEcsClusterArns();
      if (!ecsClusterArnsList.isEmpty() || !ecsClusterArnsList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("EcsClusterArns");
        jsonGenerator.writeStartArray();
        for (String ecsClusterArnsListValue : ecsClusterArnsList) {
          if (ecsClusterArnsListValue != null) {
            jsonGenerator.writeValue(ecsClusterArnsListValue);
          }
        }
        jsonGenerator.writeEndArray();
      }
      if (describeEcsClustersRequest.getStackId() != null) {
        jsonGenerator.writeFieldName("StackId").writeValue(describeEcsClustersRequest.getStackId());
      }
      if (describeEcsClustersRequest.getNextToken() != null) {
        jsonGenerator
            .writeFieldName("NextToken")
            .writeValue(describeEcsClustersRequest.getNextToken());
      }
      if (describeEcsClustersRequest.getMaxResults() != null) {
        jsonGenerator
            .writeFieldName("MaxResults")
            .writeValue(describeEcsClustersRequest.getMaxResults());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<StopWorkspacesRequest> marshall(StopWorkspacesRequest stopWorkspacesRequest) {

    if (stopWorkspacesRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<StopWorkspacesRequest> request =
        new DefaultRequest<StopWorkspacesRequest>(stopWorkspacesRequest, "AmazonWorkspaces");
    request.addHeader("X-Amz-Target", "WorkspacesService.StopWorkspaces");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      com.amazonaws.internal.SdkInternalList<StopRequest> stopWorkspaceRequestsList =
          (com.amazonaws.internal.SdkInternalList<StopRequest>)
              stopWorkspacesRequest.getStopWorkspaceRequests();
      if (!stopWorkspaceRequestsList.isEmpty() || !stopWorkspaceRequestsList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("StopWorkspaceRequests");
        jsonGenerator.writeStartArray();
        for (StopRequest stopWorkspaceRequestsListValue : stopWorkspaceRequestsList) {
          if (stopWorkspaceRequestsListValue != null) {

            StopRequestJsonMarshaller.getInstance()
                .marshall(stopWorkspaceRequestsListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<ListClustersRequest> marshall(ListClustersRequest listClustersRequest) {

    if (listClustersRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<ListClustersRequest> request =
        new DefaultRequest<ListClustersRequest>(listClustersRequest, "AmazonElasticMapReduce");
    request.addHeader("X-Amz-Target", "ElasticMapReduce.ListClusters");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (listClustersRequest.getCreatedAfter() != null) {
        jsonGenerator
            .writeFieldName("CreatedAfter")
            .writeValue(listClustersRequest.getCreatedAfter());
      }
      if (listClustersRequest.getCreatedBefore() != null) {
        jsonGenerator
            .writeFieldName("CreatedBefore")
            .writeValue(listClustersRequest.getCreatedBefore());
      }

      com.amazonaws.internal.SdkInternalList<String> clusterStatesList =
          (com.amazonaws.internal.SdkInternalList<String>) listClustersRequest.getClusterStates();
      if (!clusterStatesList.isEmpty() || !clusterStatesList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("ClusterStates");
        jsonGenerator.writeStartArray();
        for (String clusterStatesListValue : clusterStatesList) {
          if (clusterStatesListValue != null) {
            jsonGenerator.writeValue(clusterStatesListValue);
          }
        }
        jsonGenerator.writeEndArray();
      }
      if (listClustersRequest.getMarker() != null) {
        jsonGenerator.writeFieldName("Marker").writeValue(listClustersRequest.getMarker());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<EnableRadiusRequest> marshall(EnableRadiusRequest enableRadiusRequest) {

    if (enableRadiusRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<EnableRadiusRequest> request =
        new DefaultRequest<EnableRadiusRequest>(enableRadiusRequest, "AWSDirectoryService");
    request.addHeader("X-Amz-Target", "DirectoryService_20150416.EnableRadius");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (enableRadiusRequest.getDirectoryId() != null) {
        jsonGenerator
            .writeFieldName("DirectoryId")
            .writeValue(enableRadiusRequest.getDirectoryId());
      }
      if (enableRadiusRequest.getRadiusSettings() != null) {
        jsonGenerator.writeFieldName("RadiusSettings");
        RadiusSettingsJsonMarshaller.getInstance()
            .marshall(enableRadiusRequest.getRadiusSettings(), jsonGenerator);
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<AddInstanceGroupsRequest> marshall(
      AddInstanceGroupsRequest addInstanceGroupsRequest) {

    if (addInstanceGroupsRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<AddInstanceGroupsRequest> request =
        new DefaultRequest<AddInstanceGroupsRequest>(
            addInstanceGroupsRequest, "AmazonElasticMapReduce");
    request.addHeader("X-Amz-Target", "ElasticMapReduce.AddInstanceGroups");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      com.amazonaws.internal.SdkInternalList<InstanceGroupConfig> instanceGroupsList =
          (com.amazonaws.internal.SdkInternalList<InstanceGroupConfig>)
              addInstanceGroupsRequest.getInstanceGroups();
      if (!instanceGroupsList.isEmpty() || !instanceGroupsList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("InstanceGroups");
        jsonGenerator.writeStartArray();
        for (InstanceGroupConfig instanceGroupsListValue : instanceGroupsList) {
          if (instanceGroupsListValue != null) {

            InstanceGroupConfigJsonMarshaller.getInstance()
                .marshall(instanceGroupsListValue, jsonGenerator);
          }
        }
        jsonGenerator.writeEndArray();
      }
      if (addInstanceGroupsRequest.getJobFlowId() != null) {
        jsonGenerator
            .writeFieldName("JobFlowId")
            .writeValue(addInstanceGroupsRequest.getJobFlowId());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<UpdateBuildRequest> marshall(UpdateBuildRequest updateBuildRequest) {

    if (updateBuildRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<UpdateBuildRequest> request =
        new DefaultRequest<UpdateBuildRequest>(updateBuildRequest, "AmazonGameLift");
    request.addHeader("X-Amz-Target", "GameLift.UpdateBuild");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (updateBuildRequest.getBuildId() != null) {
        jsonGenerator.writeFieldName("BuildId").writeValue(updateBuildRequest.getBuildId());
      }
      if (updateBuildRequest.getName() != null) {
        jsonGenerator.writeFieldName("Name").writeValue(updateBuildRequest.getName());
      }
      if (updateBuildRequest.getVersion() != null) {
        jsonGenerator.writeFieldName("Version").writeValue(updateBuildRequest.getVersion());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DeleteMethodResponseRequest> marshall(
      DeleteMethodResponseRequest deleteMethodResponseRequest) {

    if (deleteMethodResponseRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DeleteMethodResponseRequest> request =
        new DefaultRequest<DeleteMethodResponseRequest>(
            deleteMethodResponseRequest, "AmazonApiGateway");

    request.setHttpMethod(HttpMethodName.DELETE);

    String uriResourcePath =
        "/restapis/{restapi_id}/resources/{resource_id}/methods/{http_method}/responses/{status_code}";

    uriResourcePath =
        uriResourcePath.replace(
            "{restapi_id}",
            (deleteMethodResponseRequest.getRestApiId() != null)
                ? SdkHttpUtils.urlEncode(
                    StringUtils.fromString(deleteMethodResponseRequest.getRestApiId()), false)
                : "");
    uriResourcePath =
        uriResourcePath.replace(
            "{resource_id}",
            (deleteMethodResponseRequest.getResourceId() != null)
                ? SdkHttpUtils.urlEncode(
                    StringUtils.fromString(deleteMethodResponseRequest.getResourceId()), false)
                : "");
    uriResourcePath =
        uriResourcePath.replace(
            "{http_method}",
            (deleteMethodResponseRequest.getHttpMethod() != null)
                ? SdkHttpUtils.urlEncode(
                    StringUtils.fromString(deleteMethodResponseRequest.getHttpMethod()), false)
                : "");
    uriResourcePath =
        uriResourcePath.replace(
            "{status_code}",
            (deleteMethodResponseRequest.getStatusCode() != null)
                ? SdkHttpUtils.urlEncode(
                    StringUtils.fromString(deleteMethodResponseRequest.getStatusCode()), false)
                : "");
    request.setResourcePath(uriResourcePath);

    request.setContent(new ByteArrayInputStream(new byte[0]));
    if (!request.getHeaders().containsKey("Content-Type")) {
      request.addHeader("Content-Type", protocolFactory.getContentType());
    }

    return request;
  }
  public Request<DeleteRealtimeEndpointRequest> marshall(
      DeleteRealtimeEndpointRequest deleteRealtimeEndpointRequest) {

    if (deleteRealtimeEndpointRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DeleteRealtimeEndpointRequest> request =
        new DefaultRequest<DeleteRealtimeEndpointRequest>(
            deleteRealtimeEndpointRequest, "AmazonMachineLearning");
    request.addHeader("X-Amz-Target", "AmazonML_20141212.DeleteRealtimeEndpoint");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (deleteRealtimeEndpointRequest.getMLModelId() != null) {
        jsonGenerator
            .writeFieldName("MLModelId")
            .writeValue(deleteRealtimeEndpointRequest.getMLModelId());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DescribeRulesPackagesRequest> marshall(
      DescribeRulesPackagesRequest describeRulesPackagesRequest) {

    if (describeRulesPackagesRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DescribeRulesPackagesRequest> request =
        new DefaultRequest<DescribeRulesPackagesRequest>(
            describeRulesPackagesRequest, "AmazonInspector");
    request.addHeader("X-Amz-Target", "InspectorService.DescribeRulesPackages");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator =
          SdkJsonProtocolFactory.createWriter(false, "1.1");

      jsonGenerator.writeStartObject();

      java.util.List<String> rulesPackageArnsList =
          describeRulesPackagesRequest.getRulesPackageArns();
      if (rulesPackageArnsList != null) {
        jsonGenerator.writeFieldName("rulesPackageArns");
        jsonGenerator.writeStartArray();
        for (String rulesPackageArnsListValue : rulesPackageArnsList) {
          if (rulesPackageArnsListValue != null) {
            jsonGenerator.writeValue(rulesPackageArnsListValue);
          }
        }
        jsonGenerator.writeEndArray();
      }
      if (describeRulesPackagesRequest.getLocale() != null) {
        jsonGenerator.writeFieldName("locale").writeValue(describeRulesPackagesRequest.getLocale());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<CreatePipelineRequest> marshall(CreatePipelineRequest createPipelineRequest) {

    if (createPipelineRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<CreatePipelineRequest> request =
        new DefaultRequest<CreatePipelineRequest>(createPipelineRequest, "AWSCodePipeline");
    request.addHeader("X-Amz-Target", "CodePipeline_20150709.CreatePipeline");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (createPipelineRequest.getPipeline() != null) {
        jsonGenerator.writeFieldName("pipeline");
        PipelineDeclarationJsonMarshaller.getInstance()
            .marshall(createPipelineRequest.getPipeline(), jsonGenerator);
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", protocolFactory.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DeleteInstanceRequest> marshall(DeleteInstanceRequest deleteInstanceRequest) {

    if (deleteInstanceRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DeleteInstanceRequest> request =
        new DefaultRequest<DeleteInstanceRequest>(deleteInstanceRequest, "AWSOpsWorks");
    request.addHeader("X-Amz-Target", "OpsWorks_20130218.DeleteInstance");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator =
          SdkJsonProtocolFactory.createWriter(false, "1.1");

      jsonGenerator.writeStartObject();

      if (deleteInstanceRequest.getInstanceId() != null) {
        jsonGenerator
            .writeFieldName("InstanceId")
            .writeValue(deleteInstanceRequest.getInstanceId());
      }
      if (deleteInstanceRequest.getDeleteElasticIp() != null) {
        jsonGenerator
            .writeFieldName("DeleteElasticIp")
            .writeValue(deleteInstanceRequest.getDeleteElasticIp());
      }
      if (deleteInstanceRequest.getDeleteVolumes() != null) {
        jsonGenerator
            .writeFieldName("DeleteVolumes")
            .writeValue(deleteInstanceRequest.getDeleteVolumes());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<GetComplianceSummaryByResourceTypeRequest> marshall(
      GetComplianceSummaryByResourceTypeRequest getComplianceSummaryByResourceTypeRequest) {

    if (getComplianceSummaryByResourceTypeRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<GetComplianceSummaryByResourceTypeRequest> request =
        new DefaultRequest<GetComplianceSummaryByResourceTypeRequest>(
            getComplianceSummaryByResourceTypeRequest, "AmazonConfig");
    request.addHeader("X-Amz-Target", "StarlingDoveService.GetComplianceSummaryByResourceType");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      com.amazonaws.internal.SdkInternalList<String> resourceTypesList =
          (com.amazonaws.internal.SdkInternalList<String>)
              getComplianceSummaryByResourceTypeRequest.getResourceTypes();
      if (!resourceTypesList.isEmpty() || !resourceTypesList.isAutoConstruct()) {
        jsonGenerator.writeFieldName("ResourceTypes");
        jsonGenerator.writeStartArray();
        for (String resourceTypesListValue : resourceTypesList) {
          if (resourceTypesListValue != null) {
            jsonGenerator.writeValue(resourceTypesListValue);
          }
        }
        jsonGenerator.writeEndArray();
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<CreatePrivateVirtualInterfaceRequest> marshall(
      CreatePrivateVirtualInterfaceRequest createPrivateVirtualInterfaceRequest) {

    if (createPrivateVirtualInterfaceRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<CreatePrivateVirtualInterfaceRequest> request =
        new DefaultRequest<CreatePrivateVirtualInterfaceRequest>(
            createPrivateVirtualInterfaceRequest, "AmazonDirectConnect");
    request.addHeader("X-Amz-Target", "OvertureService.CreatePrivateVirtualInterface");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (createPrivateVirtualInterfaceRequest.getConnectionId() != null) {
        jsonGenerator
            .writeFieldName("connectionId")
            .writeValue(createPrivateVirtualInterfaceRequest.getConnectionId());
      }
      if (createPrivateVirtualInterfaceRequest.getNewPrivateVirtualInterface() != null) {
        jsonGenerator.writeFieldName("newPrivateVirtualInterface");
        NewPrivateVirtualInterfaceJsonMarshaller.getInstance()
            .marshall(
                createPrivateVirtualInterfaceRequest.getNewPrivateVirtualInterface(),
                jsonGenerator);
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<ListTagsForResourceRequest> marshall(
      ListTagsForResourceRequest listTagsForResourceRequest) {

    if (listTagsForResourceRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<ListTagsForResourceRequest> request =
        new DefaultRequest<ListTagsForResourceRequest>(
            listTagsForResourceRequest, "AWSStorageGateway");
    request.addHeader("X-Amz-Target", "StorageGateway_20130630.ListTagsForResource");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      jsonGenerator.writeStartObject();

      if (listTagsForResourceRequest.getResourceARN() != null) {
        jsonGenerator
            .writeFieldName("ResourceARN")
            .writeValue(listTagsForResourceRequest.getResourceARN());
      }
      if (listTagsForResourceRequest.getMarker() != null) {
        jsonGenerator.writeFieldName("Marker").writeValue(listTagsForResourceRequest.getMarker());
      }
      if (listTagsForResourceRequest.getLimit() != null) {
        jsonGenerator.writeFieldName("Limit").writeValue(listTagsForResourceRequest.getLimit());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<SetLoggingOptionsRequest> marshall(
      SetLoggingOptionsRequest setLoggingOptionsRequest) {

    if (setLoggingOptionsRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<SetLoggingOptionsRequest> request =
        new DefaultRequest<SetLoggingOptionsRequest>(setLoggingOptionsRequest, "AWSIot");

    request.setHttpMethod(HttpMethodName.POST);

    String uriResourcePath = "/loggingOptions";

    request.setResourcePath(uriResourcePath);

    try {
      final StructuredJsonGenerator jsonGenerator = protocolFactory.createGenerator();

      LoggingOptionsPayload loggingOptionsPayload =
          setLoggingOptionsRequest.getLoggingOptionsPayload();
      if (loggingOptionsPayload != null) {
        jsonGenerator.writeStartObject();
        if (loggingOptionsPayload.getRoleArn() != null) {
          jsonGenerator.writeFieldName("roleArn").writeValue(loggingOptionsPayload.getRoleArn());
        }
        if (loggingOptionsPayload.getLogLevel() != null) {
          jsonGenerator.writeFieldName("logLevel").writeValue(loggingOptionsPayload.getLogLevel());
        }
        jsonGenerator.writeEndObject();
      }

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      if (!request.getHeaders().containsKey("Content-Type")) {
        request.addHeader("Content-Type", DEFAULT_CONTENT_TYPE);
      }
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<CreateSnapshotRequest> marshall(CreateSnapshotRequest createSnapshotRequest) {

    if (createSnapshotRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<CreateSnapshotRequest> request =
        new DefaultRequest<CreateSnapshotRequest>(createSnapshotRequest, "AWSStorageGateway");
    request.addHeader("X-Amz-Target", "StorageGateway_20130630.CreateSnapshot");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator =
          SdkJsonProtocolFactory.createWriter(false, "1.1");

      jsonGenerator.writeStartObject();

      if (createSnapshotRequest.getVolumeARN() != null) {
        jsonGenerator.writeFieldName("VolumeARN").writeValue(createSnapshotRequest.getVolumeARN());
      }
      if (createSnapshotRequest.getSnapshotDescription() != null) {
        jsonGenerator
            .writeFieldName("SnapshotDescription")
            .writeValue(createSnapshotRequest.getSnapshotDescription());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }
  public Request<DisableDomainTransferLockRequest> marshall(
      DisableDomainTransferLockRequest disableDomainTransferLockRequest) {

    if (disableDomainTransferLockRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<DisableDomainTransferLockRequest> request =
        new DefaultRequest<DisableDomainTransferLockRequest>(
            disableDomainTransferLockRequest, "AmazonRoute53Domains");
    request.addHeader("X-Amz-Target", "Route53Domains_v20140515.DisableDomainTransferLock");

    request.setHttpMethod(HttpMethodName.POST);

    request.setResourcePath("");

    try {
      final StructuredJsonGenerator jsonGenerator =
          SdkJsonProtocolFactory.createWriter(false, "1.1");

      jsonGenerator.writeStartObject();

      if (disableDomainTransferLockRequest.getDomainName() != null) {
        jsonGenerator
            .writeFieldName("DomainName")
            .writeValue(disableDomainTransferLockRequest.getDomainName());
      }

      jsonGenerator.writeEndObject();

      byte[] content = jsonGenerator.getBytes();
      request.setContent(new ByteArrayInputStream(content));
      request.addHeader("Content-Length", Integer.toString(content.length));
      request.addHeader("Content-Type", jsonGenerator.getContentType());
    } catch (Throwable t) {
      throw new AmazonClientException("Unable to marshall request to JSON: " + t.getMessage(), t);
    }

    return request;
  }