public ReleaseStaticIpResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ReleaseStaticIpResult releaseStaticIpResult = new ReleaseStaticIpResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("operations", targetDepth)) {
          context.nextToken();
          releaseStaticIpResult.setOperations(
              new ListUnmarshaller<Operation>(OperationJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return releaseStaticIpResult;
  }
  public InstallToRemoteAccessSessionResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    InstallToRemoteAccessSessionResult installToRemoteAccessSessionResult =
        new InstallToRemoteAccessSessionResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("appUpload", targetDepth)) {
          context.nextToken();
          installToRemoteAccessSessionResult.setAppUpload(
              UploadJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return installToRemoteAccessSessionResult;
  }
  public GetUserAttributeVerificationCodeResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    GetUserAttributeVerificationCodeResult getUserAttributeVerificationCodeResult =
        new GetUserAttributeVerificationCodeResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("CodeDeliveryDetails", targetDepth)) {
          context.nextToken();
          getUserAttributeVerificationCodeResult.setCodeDeliveryDetails(
              CodeDeliveryDetailsTypeJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return getUserAttributeVerificationCodeResult;
  }
  public DeregisterContainerInstanceResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    DeregisterContainerInstanceResult deregisterContainerInstanceResult =
        new DeregisterContainerInstanceResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("containerInstance", targetDepth)) {
          context.nextToken();
          deregisterContainerInstanceResult.setContainerInstance(
              ContainerInstanceJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return deregisterContainerInstanceResult;
  }
  public GetSegmentVersionsResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    GetSegmentVersionsResult getSegmentVersionsResult = new GetSegmentVersionsResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      getSegmentVersionsResult.setSegmentsResponse(
          SegmentsResponseJsonUnmarshaller.getInstance().unmarshall(context));
      token = context.nextToken();
    }

    return getSegmentVersionsResult;
  }
  public UpdateEndpointResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    UpdateEndpointResult updateEndpointResult = new UpdateEndpointResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      updateEndpointResult.setMessageBody(
          MessageBodyJsonUnmarshaller.getInstance().unmarshall(context));
      token = context.nextToken();
    }

    return updateEndpointResult;
  }
  public InitiateJobResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    InitiateJobResult initiateJobResult = new InitiateJobResult();

    if (context.isStartOfDocument()) {
      if (context.getHeader("Location") != null) {
        context.setCurrentHeader("Location");
        initiateJobResult.setLocation(context.getUnmarshaller(String.class).unmarshall(context));
      }
      if (context.getHeader("x-amz-job-id") != null) {
        context.setCurrentHeader("x-amz-job-id");
        initiateJobResult.setJobId(context.getUnmarshaller(String.class).unmarshall(context));
      }
    }

    return initiateJobResult;
  }
  public ParameterConstraints unmarshall(JsonUnmarshallerContext context) throws Exception {
    ParameterConstraints parameterConstraints = new ParameterConstraints();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("AllowedValues", targetDepth)) {
          context.nextToken();
          parameterConstraints.setAllowedValues(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return parameterConstraints;
  }
  public SeverityLevel unmarshall(JsonUnmarshallerContext context) throws Exception {
    SeverityLevel severityLevel = new SeverityLevel();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("code", targetDepth)) {
          context.nextToken();
          severityLevel.setCode(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("name", targetDepth)) {
          context.nextToken();
          severityLevel.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return severityLevel;
  }
  public ActivityTypeConfiguration unmarshall(JsonUnmarshallerContext context) throws Exception {
    ActivityTypeConfiguration activityTypeConfiguration = new ActivityTypeConfiguration();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("defaultTaskStartToCloseTimeout", targetDepth)) {
          context.nextToken();
          activityTypeConfiguration.setDefaultTaskStartToCloseTimeout(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("defaultTaskHeartbeatTimeout", targetDepth)) {
          context.nextToken();
          activityTypeConfiguration.setDefaultTaskHeartbeatTimeout(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("defaultTaskList", targetDepth)) {
          context.nextToken();
          activityTypeConfiguration.setDefaultTaskList(
              TaskListJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("defaultTaskPriority", targetDepth)) {
          context.nextToken();
          activityTypeConfiguration.setDefaultTaskPriority(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("defaultTaskScheduleToStartTimeout", targetDepth)) {
          context.nextToken();
          activityTypeConfiguration.setDefaultTaskScheduleToStartTimeout(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("defaultTaskScheduleToCloseTimeout", targetDepth)) {
          context.nextToken();
          activityTypeConfiguration.setDefaultTaskScheduleToCloseTimeout(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return activityTypeConfiguration;
  }
  public CreateCachediSCSIVolumeResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    CreateCachediSCSIVolumeResult createCachediSCSIVolumeResult =
        new CreateCachediSCSIVolumeResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("VolumeARN", targetDepth)) {
          context.nextToken();
          createCachediSCSIVolumeResult.setVolumeARN(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("TargetARN", targetDepth)) {
          context.nextToken();
          createCachediSCSIVolumeResult.setTargetARN(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return createCachediSCSIVolumeResult;
  }
  public ListClustersResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ListClustersResult listClustersResult = new ListClustersResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Clusters", targetDepth)) {
          context.nextToken();
          listClustersResult.setClusters(
              new ListUnmarshaller<ClusterSummary>(ClusterSummaryJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Marker", targetDepth)) {
          context.nextToken();
          listClustersResult.setMarker(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return listClustersResult;
  }
  public CancelWorkflowExecutionDecisionAttributes unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    CancelWorkflowExecutionDecisionAttributes cancelWorkflowExecutionDecisionAttributes =
        new CancelWorkflowExecutionDecisionAttributes();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("details", targetDepth)) {
          context.nextToken();
          cancelWorkflowExecutionDecisionAttributes.setDetails(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return cancelWorkflowExecutionDecisionAttributes;
  }
  public ScheduleKeyDeletionResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ScheduleKeyDeletionResult scheduleKeyDeletionResult = new ScheduleKeyDeletionResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("KeyId", targetDepth)) {
          context.nextToken();
          scheduleKeyDeletionResult.setKeyId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("DeletionDate", targetDepth)) {
          context.nextToken();
          scheduleKeyDeletionResult.setDeletionDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return scheduleKeyDeletionResult;
  }
  public RecordDetail unmarshall(JsonUnmarshallerContext context) throws Exception {
    RecordDetail recordDetail = new RecordDetail();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("RecordId", targetDepth)) {
          context.nextToken();
          recordDetail.setRecordId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("ProvisionedProductName", targetDepth)) {
          context.nextToken();
          recordDetail.setProvisionedProductName(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Status", targetDepth)) {
          context.nextToken();
          recordDetail.setStatus(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("CreatedTime", targetDepth)) {
          context.nextToken();
          recordDetail.setCreatedTime(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("UpdatedTime", targetDepth)) {
          context.nextToken();
          recordDetail.setUpdatedTime(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("ProvisionedProductType", targetDepth)) {
          context.nextToken();
          recordDetail.setProvisionedProductType(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("RecordType", targetDepth)) {
          context.nextToken();
          recordDetail.setRecordType(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("ProvisionedProductId", targetDepth)) {
          context.nextToken();
          recordDetail.setProvisionedProductId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("ProductId", targetDepth)) {
          context.nextToken();
          recordDetail.setProductId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("ProvisioningArtifactId", targetDepth)) {
          context.nextToken();
          recordDetail.setProvisioningArtifactId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("PathId", targetDepth)) {
          context.nextToken();
          recordDetail.setPathId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("RecordErrors", targetDepth)) {
          context.nextToken();
          recordDetail.setRecordErrors(
              new ListUnmarshaller<RecordError>(RecordErrorJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("RecordTags", targetDepth)) {
          context.nextToken();
          recordDetail.setRecordTags(
              new ListUnmarshaller<RecordTag>(RecordTagJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return recordDetail;
  }
  public DevicePoolCompatibilityResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    DevicePoolCompatibilityResult devicePoolCompatibilityResult =
        new DevicePoolCompatibilityResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("device", targetDepth)) {
          context.nextToken();
          devicePoolCompatibilityResult.setDevice(
              DeviceJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("compatible", targetDepth)) {
          context.nextToken();
          devicePoolCompatibilityResult.setCompatible(
              context.getUnmarshaller(Boolean.class).unmarshall(context));
        }
        if (context.testExpression("incompatibilityMessages", targetDepth)) {
          context.nextToken();
          devicePoolCompatibilityResult.setIncompatibilityMessages(
              new ListUnmarshaller<IncompatibilityMessage>(
                      IncompatibilityMessageJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return devicePoolCompatibilityResult;
  }
  public DataRetrievalRule unmarshall(JsonUnmarshallerContext context) throws Exception {
    DataRetrievalRule dataRetrievalRule = new DataRetrievalRule();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Strategy", targetDepth)) {
          context.nextToken();
          dataRetrievalRule.setStrategy(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("BytesPerHour", targetDepth)) {
          context.nextToken();
          dataRetrievalRule.setBytesPerHour(
              context.getUnmarshaller(Long.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return dataRetrievalRule;
  }
  public DocumentationVersion unmarshall(JsonUnmarshallerContext context) throws Exception {
    DocumentationVersion documentationVersion = new DocumentationVersion();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("version", targetDepth)) {
          context.nextToken();
          documentationVersion.setVersion(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("createdDate", targetDepth)) {
          context.nextToken();
          documentationVersion.setCreatedDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("description", targetDepth)) {
          context.nextToken();
          documentationVersion.setDescription(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return documentationVersion;
  }
  public GatewayInfo unmarshall(JsonUnmarshallerContext context) throws Exception {
    GatewayInfo gatewayInfo = new GatewayInfo();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("GatewayId", targetDepth)) {
          context.nextToken();
          gatewayInfo.setGatewayId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("GatewayARN", targetDepth)) {
          context.nextToken();
          gatewayInfo.setGatewayARN(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("GatewayType", targetDepth)) {
          context.nextToken();
          gatewayInfo.setGatewayType(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("GatewayOperationalState", targetDepth)) {
          context.nextToken();
          gatewayInfo.setGatewayOperationalState(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("GatewayName", targetDepth)) {
          context.nextToken();
          gatewayInfo.setGatewayName(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return gatewayInfo;
  }
  public GrantListEntry unmarshall(JsonUnmarshallerContext context) throws Exception {
    GrantListEntry grantListEntry = new GrantListEntry();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("KeyId", targetDepth)) {
          context.nextToken();
          grantListEntry.setKeyId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("GrantId", targetDepth)) {
          context.nextToken();
          grantListEntry.setGrantId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          grantListEntry.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("CreationDate", targetDepth)) {
          context.nextToken();
          grantListEntry.setCreationDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("GranteePrincipal", targetDepth)) {
          context.nextToken();
          grantListEntry.setGranteePrincipal(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("RetiringPrincipal", targetDepth)) {
          context.nextToken();
          grantListEntry.setRetiringPrincipal(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("IssuingAccount", targetDepth)) {
          context.nextToken();
          grantListEntry.setIssuingAccount(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Operations", targetDepth)) {
          context.nextToken();
          grantListEntry.setOperations(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
        if (context.testExpression("Constraints", targetDepth)) {
          context.nextToken();
          grantListEntry.setConstraints(
              GrantConstraintsJsonUnmarshaller.getInstance().unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return grantListEntry;
  }
  public UpdateWebACLResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    UpdateWebACLResult updateWebACLResult = new UpdateWebACLResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("ChangeToken", targetDepth)) {
          context.nextToken();
          updateWebACLResult.setChangeToken(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return updateWebACLResult;
  }
  public GetRepositoryPolicyResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    GetRepositoryPolicyResult getRepositoryPolicyResult = new GetRepositoryPolicyResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("registryId", targetDepth)) {
          context.nextToken();
          getRepositoryPolicyResult.setRegistryId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("repositoryName", targetDepth)) {
          context.nextToken();
          getRepositoryPolicyResult.setRepositoryName(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("policyText", targetDepth)) {
          context.nextToken();
          getRepositoryPolicyResult.setPolicyText(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return getRepositoryPolicyResult;
  }
  public BatchGetDeploymentGroupsResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    BatchGetDeploymentGroupsResult batchGetDeploymentGroupsResult =
        new BatchGetDeploymentGroupsResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("deploymentGroupsInfo", targetDepth)) {
          context.nextToken();
          batchGetDeploymentGroupsResult.setDeploymentGroupsInfo(
              new ListUnmarshaller<DeploymentGroupInfo>(
                      DeploymentGroupInfoJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("errorMessage", targetDepth)) {
          context.nextToken();
          batchGetDeploymentGroupsResult.setErrorMessage(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return batchGetDeploymentGroupsResult;
  }
  public CreateRestApiResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    CreateRestApiResult createRestApiResult = new CreateRestApiResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("id", targetDepth)) {
          context.nextToken();
          createRestApiResult.setId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("name", targetDepth)) {
          context.nextToken();
          createRestApiResult.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("description", targetDepth)) {
          context.nextToken();
          createRestApiResult.setDescription(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("createdDate", targetDepth)) {
          context.nextToken();
          createRestApiResult.setCreatedDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("version", targetDepth)) {
          context.nextToken();
          createRestApiResult.setVersion(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("warnings", targetDepth)) {
          context.nextToken();
          createRestApiResult.setWarnings(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
        if (context.testExpression("binaryMediaTypes", targetDepth)) {
          context.nextToken();
          createRestApiResult.setBinaryMediaTypes(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return createRestApiResult;
  }
  public Resource unmarshall(JsonUnmarshallerContext context) throws Exception {
    Resource resource = new Resource();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("name", targetDepth)) {
          context.nextToken();
          resource.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("type", targetDepth)) {
          context.nextToken();
          resource.setType(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("doubleValue", targetDepth)) {
          context.nextToken();
          resource.setDoubleValue(context.getUnmarshaller(Double.class).unmarshall(context));
        }
        if (context.testExpression("longValue", targetDepth)) {
          context.nextToken();
          resource.setLongValue(context.getUnmarshaller(Long.class).unmarshall(context));
        }
        if (context.testExpression("integerValue", targetDepth)) {
          context.nextToken();
          resource.setIntegerValue(context.getUnmarshaller(Integer.class).unmarshall(context));
        }
        if (context.testExpression("stringSetValue", targetDepth)) {
          context.nextToken();
          resource.setStringSetValue(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return resource;
  }
  public MethodSnapshot unmarshall(JsonUnmarshallerContext context) throws Exception {
    MethodSnapshot methodSnapshot = new MethodSnapshot();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("authorizationType", targetDepth)) {
          context.nextToken();
          methodSnapshot.setAuthorizationType(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("apiKeyRequired", targetDepth)) {
          context.nextToken();
          methodSnapshot.setApiKeyRequired(
              context.getUnmarshaller(Boolean.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return methodSnapshot;
  }
  public AdminGetUserResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    AdminGetUserResult adminGetUserResult = new AdminGetUserResult();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Username", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setUsername(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("UserAttributes", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setUserAttributes(
              new ListUnmarshaller<AttributeType>(AttributeTypeJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("UserCreateDate", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setUserCreateDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("UserLastModifiedDate", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setUserLastModifiedDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("Enabled", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setEnabled(context.getUnmarshaller(Boolean.class).unmarshall(context));
        }
        if (context.testExpression("UserStatus", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setUserStatus(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("MFAOptions", targetDepth)) {
          context.nextToken();
          adminGetUserResult.setMFAOptions(
              new ListUnmarshaller<MFAOptionType>(MFAOptionTypeJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return adminGetUserResult;
  }
  public Stream unmarshall(JsonUnmarshallerContext context) throws Exception {
    Stream stream = new Stream();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("StreamArn", targetDepth)) {
          context.nextToken();
          stream.setStreamArn(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("TableName", targetDepth)) {
          context.nextToken();
          stream.setTableName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("StreamLabel", targetDepth)) {
          context.nextToken();
          stream.setStreamLabel(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return stream;
  }
  public GitHubLocation unmarshall(JsonUnmarshallerContext context) throws Exception {
    GitHubLocation gitHubLocation = new GitHubLocation();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("repository", targetDepth)) {
          context.nextToken();
          gitHubLocation.setRepository(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("commitId", targetDepth)) {
          context.nextToken();
          gitHubLocation.setCommitId(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return gitHubLocation;
  }
  public AliasListEntry unmarshall(JsonUnmarshallerContext context) throws Exception {
    AliasListEntry aliasListEntry = new AliasListEntry();

    int originalDepth = context.getCurrentDepth();
    String currentParentElement = context.getCurrentParentElement();
    int targetDepth = originalDepth + 1;

    JsonToken token = context.getCurrentToken();
    if (token == null) token = context.nextToken();
    if (token == VALUE_NULL) return null;

    while (true) {
      if (token == null) break;

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("AliasName", targetDepth)) {
          context.nextToken();
          aliasListEntry.setAliasName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("AliasArn", targetDepth)) {
          context.nextToken();
          aliasListEntry.setAliasArn(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("TargetKeyId", targetDepth)) {
          context.nextToken();
          aliasListEntry.setTargetKeyId(context.getUnmarshaller(String.class).unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getLastParsedParentElement() == null
            || context.getLastParsedParentElement().equals(currentParentElement)) {
          if (context.getCurrentDepth() <= originalDepth) break;
        }
      }
      token = context.nextToken();
    }

    return aliasListEntry;
  }