public JobSummary unmarshall(JsonUnmarshallerContext context) throws Exception {
    JobSummary jobSummary = new JobSummary();

    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("jobId", targetDepth)) {
          context.nextToken();
          jobSummary.setJobId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("jobName", targetDepth)) {
          context.nextToken();
          jobSummary.setJobName(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 jobSummary;
  }
  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 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 CreateGrantResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    CreateGrantResult createGrantResult = new CreateGrantResult();

    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("GrantToken", targetDepth)) {
          context.nextToken();
          createGrantResult.setGrantToken(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("GrantId", targetDepth)) {
          context.nextToken();
          createGrantResult.setGrantId(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 createGrantResult;
  }
  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 Tag unmarshall(JsonUnmarshallerContext context) throws Exception {
    Tag tag = new Tag();

    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("Key", targetDepth)) {
          context.nextToken();
          tag.setKey(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Value", targetDepth)) {
          context.nextToken();
          tag.setValue(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 tag;
  }
  public ThrottleSettings unmarshall(JsonUnmarshallerContext context) throws Exception {
    ThrottleSettings throttleSettings = new ThrottleSettings();

    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("burstLimit", targetDepth)) {
          context.nextToken();
          throttleSettings.setBurstLimit(
              context.getUnmarshaller(Integer.class).unmarshall(context));
        }
        if (context.testExpression("rateLimit", targetDepth)) {
          context.nextToken();
          throttleSettings.setRateLimit(context.getUnmarshaller(Double.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 throttleSettings;
  }
  public IncompatibilityMessage unmarshall(JsonUnmarshallerContext context) throws Exception {
    IncompatibilityMessage incompatibilityMessage = new IncompatibilityMessage();

    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("message", targetDepth)) {
          context.nextToken();
          incompatibilityMessage.setMessage(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("type", targetDepth)) {
          context.nextToken();
          incompatibilityMessage.setType(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 incompatibilityMessage;
  }
  public FleetError unmarshall(JsonUnmarshallerContext context) throws Exception {
    FleetError fleetError = new FleetError();

    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("ErrorCode", targetDepth)) {
          context.nextToken();
          fleetError.setErrorCode(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("ErrorMessage", targetDepth)) {
          context.nextToken();
          fleetError.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 fleetError;
  }
  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 UserType unmarshall(JsonUnmarshallerContext context) throws Exception {
    UserType userType = new UserType();

    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();
          userType.setUsername(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Attributes", targetDepth)) {
          context.nextToken();
          userType.setAttributes(
              new ListUnmarshaller<AttributeType>(AttributeTypeJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("UserCreateDate", targetDepth)) {
          context.nextToken();
          userType.setUserCreateDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("UserLastModifiedDate", targetDepth)) {
          context.nextToken();
          userType.setUserLastModifiedDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("Enabled", targetDepth)) {
          context.nextToken();
          userType.setEnabled(context.getUnmarshaller(Boolean.class).unmarshall(context));
        }
        if (context.testExpression("UserStatus", targetDepth)) {
          context.nextToken();
          userType.setUserStatus(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 userType;
  }
  public WorkflowExecutionDetail unmarshall(JsonUnmarshallerContext context) throws Exception {
    WorkflowExecutionDetail workflowExecutionDetail = new WorkflowExecutionDetail();

    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("executionInfo", targetDepth)) {
          context.nextToken();
          workflowExecutionDetail.setExecutionInfo(
              WorkflowExecutionInfoJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("executionConfiguration", targetDepth)) {
          context.nextToken();
          workflowExecutionDetail.setExecutionConfiguration(
              WorkflowExecutionConfigurationJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("openCounts", targetDepth)) {
          context.nextToken();
          workflowExecutionDetail.setOpenCounts(
              WorkflowExecutionOpenCountsJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("latestActivityTaskTimestamp", targetDepth)) {
          context.nextToken();
          workflowExecutionDetail.setLatestActivityTaskTimestamp(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("latestExecutionContext", targetDepth)) {
          context.nextToken();
          workflowExecutionDetail.setLatestExecutionContext(
              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 workflowExecutionDetail;
  }
  public CreateJobPlaylist unmarshall(JsonUnmarshallerContext context) throws Exception {
    CreateJobPlaylist createJobPlaylist = new CreateJobPlaylist();

    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();
          createJobPlaylist.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Format", targetDepth)) {
          context.nextToken();
          createJobPlaylist.setFormat(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("OutputKeys", targetDepth)) {
          context.nextToken();
          createJobPlaylist.setOutputKeys(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
        if (context.testExpression("HlsContentProtection", targetDepth)) {
          context.nextToken();
          createJobPlaylist.setHlsContentProtection(
              HlsContentProtectionJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("PlayReadyDrm", targetDepth)) {
          context.nextToken();
          createJobPlaylist.setPlayReadyDrm(
              PlayReadyDrmJsonUnmarshaller.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 createJobPlaylist;
  }
  public PutRestApiResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    PutRestApiResult putRestApiResult = new PutRestApiResult();

    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();
          putRestApiResult.setId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("name", targetDepth)) {
          context.nextToken();
          putRestApiResult.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("description", targetDepth)) {
          context.nextToken();
          putRestApiResult.setDescription(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("createdDate", targetDepth)) {
          context.nextToken();
          putRestApiResult.setCreatedDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("warnings", targetDepth)) {
          context.nextToken();
          putRestApiResult.setWarnings(
              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 putRestApiResult;
  }
  public Offering unmarshall(JsonUnmarshallerContext context) throws Exception {
    Offering offering = new Offering();

    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();
          offering.setId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("description", targetDepth)) {
          context.nextToken();
          offering.setDescription(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("type", targetDepth)) {
          context.nextToken();
          offering.setType(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("platform", targetDepth)) {
          context.nextToken();
          offering.setPlatform(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("recurringCharges", targetDepth)) {
          context.nextToken();
          offering.setRecurringCharges(
              new ListUnmarshaller<RecurringCharge>(RecurringChargeJsonUnmarshaller.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 offering;
  }
  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 ListSuitesResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    ListSuitesResult listSuitesResult = new ListSuitesResult();

    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("suites", targetDepth)) {
          context.nextToken();
          listSuitesResult.setSuites(
              new ListUnmarshaller<Suite>(SuiteJsonUnmarshaller.getInstance()).unmarshall(context));
        }
        if (context.testExpression("nextToken", targetDepth)) {
          context.nextToken();
          listSuitesResult.setNextToken(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 listSuitesResult;
  }
  public GCMChannelRequest unmarshall(JsonUnmarshallerContext context) throws Exception {
    GCMChannelRequest gCMChannelRequest = new GCMChannelRequest();

    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("ApiKey", targetDepth)) {
          context.nextToken();
          gCMChannelRequest.setApiKey(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 gCMChannelRequest;
  }
  public WebACLUpdate unmarshall(JsonUnmarshallerContext context) throws Exception {
    WebACLUpdate webACLUpdate = new WebACLUpdate();

    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("Action", targetDepth)) {
          context.nextToken();
          webACLUpdate.setAction(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("ActivatedRule", targetDepth)) {
          context.nextToken();
          webACLUpdate.setActivatedRule(
              ActivatedRuleJsonUnmarshaller.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 webACLUpdate;
  }
  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 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 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 TaskObject unmarshall(JsonUnmarshallerContext context) throws Exception {
    TaskObject taskObject = new TaskObject();

    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("taskId", targetDepth)) {
          context.nextToken();
          taskObject.setTaskId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("pipelineId", targetDepth)) {
          context.nextToken();
          taskObject.setPipelineId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("attemptId", targetDepth)) {
          context.nextToken();
          taskObject.setAttemptId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("objects", targetDepth)) {
          context.nextToken();
          taskObject.setObjects(
              new MapUnmarshaller<String, PipelineObject>(
                      context.getUnmarshaller(String.class),
                      PipelineObjectJsonUnmarshaller.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 taskObject;
  }
  public CompleteLayerUploadResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    CompleteLayerUploadResult completeLayerUploadResult = new CompleteLayerUploadResult();

    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();
          completeLayerUploadResult.setRegistryId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("repositoryName", targetDepth)) {
          context.nextToken();
          completeLayerUploadResult.setRepositoryName(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("uploadId", targetDepth)) {
          context.nextToken();
          completeLayerUploadResult.setUploadId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("layerDigest", targetDepth)) {
          context.nextToken();
          completeLayerUploadResult.setLayerDigest(
              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 completeLayerUploadResult;
  }
  public GetDomainNameResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    GetDomainNameResult getDomainNameResult = new GetDomainNameResult();

    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("domainName", targetDepth)) {
          context.nextToken();
          getDomainNameResult.setDomainName(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("certificateName", targetDepth)) {
          context.nextToken();
          getDomainNameResult.setCertificateName(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("certificateUploadDate", targetDepth)) {
          context.nextToken();
          getDomainNameResult.setCertificateUploadDate(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("distributionDomainName", targetDepth)) {
          context.nextToken();
          getDomainNameResult.setDistributionDomainName(
              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 getDomainNameResult;
  }
  public ActionTypeSettings unmarshall(JsonUnmarshallerContext context) throws Exception {
    ActionTypeSettings actionTypeSettings = new ActionTypeSettings();

    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("thirdPartyConfigurationUrl", targetDepth)) {
          context.nextToken();
          actionTypeSettings.setThirdPartyConfigurationUrl(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("entityUrlTemplate", targetDepth)) {
          context.nextToken();
          actionTypeSettings.setEntityUrlTemplate(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("executionUrlTemplate", targetDepth)) {
          context.nextToken();
          actionTypeSettings.setExecutionUrlTemplate(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("revisionUrlTemplate", targetDepth)) {
          context.nextToken();
          actionTypeSettings.setRevisionUrlTemplate(
              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 actionTypeSettings;
  }
  public IdentityPoolUsage unmarshall(JsonUnmarshallerContext context) throws Exception {
    IdentityPoolUsage identityPoolUsage = new IdentityPoolUsage();

    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("IdentityPoolId", targetDepth)) {
          context.nextToken();
          identityPoolUsage.setIdentityPoolId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("SyncSessionsCount", targetDepth)) {
          context.nextToken();
          identityPoolUsage.setSyncSessionsCount(
              context.getUnmarshaller(Long.class).unmarshall(context));
        }
        if (context.testExpression("DataStorage", targetDepth)) {
          context.nextToken();
          identityPoolUsage.setDataStorage(context.getUnmarshaller(Long.class).unmarshall(context));
        }
        if (context.testExpression("LastModifiedDate", targetDepth)) {
          context.nextToken();
          identityPoolUsage.setLastModifiedDate(
              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 identityPoolUsage;
  }
  public PipelineSummary unmarshall(JsonUnmarshallerContext context) throws Exception {
    PipelineSummary pipelineSummary = new PipelineSummary();

    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();
          pipelineSummary.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("version", targetDepth)) {
          context.nextToken();
          pipelineSummary.setVersion(context.getUnmarshaller(Integer.class).unmarshall(context));
        }
        if (context.testExpression("created", targetDepth)) {
          context.nextToken();
          pipelineSummary.setCreated(
              context.getUnmarshaller(java.util.Date.class).unmarshall(context));
        }
        if (context.testExpression("updated", targetDepth)) {
          context.nextToken();
          pipelineSummary.setUpdated(
              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 pipelineSummary;
  }
  public LookupDeveloperIdentityResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    LookupDeveloperIdentityResult lookupDeveloperIdentityResult =
        new LookupDeveloperIdentityResult();

    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("IdentityId", targetDepth)) {
          context.nextToken();
          lookupDeveloperIdentityResult.setIdentityId(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("DeveloperUserIdentifierList", targetDepth)) {
          context.nextToken();
          lookupDeveloperIdentityResult.setDeveloperUserIdentifierList(
              new ListUnmarshaller<String>(context.getUnmarshaller(String.class))
                  .unmarshall(context));
        }
        if (context.testExpression("NextToken", targetDepth)) {
          context.nextToken();
          lookupDeveloperIdentityResult.setNextToken(
              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 lookupDeveloperIdentityResult;
  }
  public DescribeBandwidthRateLimitResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    DescribeBandwidthRateLimitResult describeBandwidthRateLimitResult =
        new DescribeBandwidthRateLimitResult();

    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("GatewayARN", targetDepth)) {
          context.nextToken();
          describeBandwidthRateLimitResult.setGatewayARN(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("AverageUploadRateLimitInBitsPerSec", targetDepth)) {
          context.nextToken();
          describeBandwidthRateLimitResult.setAverageUploadRateLimitInBitsPerSec(
              context.getUnmarshaller(Long.class).unmarshall(context));
        }
        if (context.testExpression("AverageDownloadRateLimitInBitsPerSec", targetDepth)) {
          context.nextToken();
          describeBandwidthRateLimitResult.setAverageDownloadRateLimitInBitsPerSec(
              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 describeBandwidthRateLimitResult;
  }