public CloneStackResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    CloneStackResult cloneStackResult = new CloneStackResult();

    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("StackId", targetDepth)) {
          context.nextToken();
          cloneStackResult.setStackId(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 cloneStackResult;
  }
  public DescribeLoadBasedAutoScalingResult unmarshall(JsonUnmarshallerContext context)
      throws Exception {
    DescribeLoadBasedAutoScalingResult describeLoadBasedAutoScalingResult =
        new DescribeLoadBasedAutoScalingResult();

    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("LoadBasedAutoScalingConfigurations", targetDepth)) {
          context.nextToken();
          describeLoadBasedAutoScalingResult.setLoadBasedAutoScalingConfigurations(
              new ListUnmarshaller<LoadBasedAutoScalingConfiguration>(
                      LoadBasedAutoScalingConfigurationJsonUnmarshaller.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 describeLoadBasedAutoScalingResult;
  }
  public RegisterInstanceResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    RegisterInstanceResult registerInstanceResult = new RegisterInstanceResult();

    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("InstanceId", targetDepth)) {
          context.nextToken();
          registerInstanceResult.setInstanceId(
              StringJsonUnmarshaller.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 registerInstanceResult;
  }
  public DescribeInstancesResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    DescribeInstancesResult describeInstancesResult = new DescribeInstancesResult();

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

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();

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

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("Instances", targetDepth)) {
          describeInstancesResult.setInstances(
              new ListUnmarshaller<Instance>(InstanceJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
      } else if (token == END_ARRAY || token == END_OBJECT) {
        if (context.getCurrentDepth() <= originalDepth) break;
      }

      token = context.nextToken();
    }

    return describeInstancesResult;
  }
  public AutoScalingThresholds unmarshall(JsonUnmarshallerContext context) throws Exception {
    AutoScalingThresholds autoScalingThresholds = new AutoScalingThresholds();

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

    JsonToken token = context.currentToken;
    if (token == null) token = context.nextToken();

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

      if (token == FIELD_NAME || token == START_OBJECT) {
        if (context.testExpression("InstanceCount", targetDepth)) {
          context.nextToken();
          autoScalingThresholds.setInstanceCount(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ThresholdsWaitTime", targetDepth)) {
          context.nextToken();
          autoScalingThresholds.setThresholdsWaitTime(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("IgnoreMetricsTime", targetDepth)) {
          context.nextToken();
          autoScalingThresholds.setIgnoreMetricsTime(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("CpuThreshold", targetDepth)) {
          context.nextToken();
          autoScalingThresholds.setCpuThreshold(
              DoubleJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("MemoryThreshold", targetDepth)) {
          context.nextToken();
          autoScalingThresholds.setMemoryThreshold(
              DoubleJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LoadThreshold", targetDepth)) {
          context.nextToken();
          autoScalingThresholds.setLoadThreshold(
              DoubleJsonUnmarshaller.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 autoScalingThresholds;
  }
  public VolumeConfiguration unmarshall(JsonUnmarshallerContext context) throws Exception {
    VolumeConfiguration volumeConfiguration = new VolumeConfiguration();

    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("MountPoint", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setMountPoint(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("RaidLevel", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setRaidLevel(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("NumberOfDisks", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setNumberOfDisks(
              IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Size", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setSize(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("VolumeType", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setVolumeType(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Iops", targetDepth)) {
          context.nextToken();
          volumeConfiguration.setIops(IntegerJsonUnmarshaller.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 volumeConfiguration;
  }
  public StackSummary unmarshall(JsonUnmarshallerContext context) throws Exception {
    StackSummary stackSummary = new StackSummary();

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

    JsonToken token = context.currentToken;
    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("StackId", targetDepth)) {
          context.nextToken();
          stackSummary.setStackId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          stackSummary.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Arn", targetDepth)) {
          context.nextToken();
          stackSummary.setArn(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("LayersCount", targetDepth)) {
          context.nextToken();
          stackSummary.setLayersCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("AppsCount", targetDepth)) {
          context.nextToken();
          stackSummary.setAppsCount(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("InstancesCount", targetDepth)) {
          context.nextToken();
          stackSummary.setInstancesCount(
              InstancesCountJsonUnmarshaller.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 stackSummary;
  }
  public Recipes unmarshall(JsonUnmarshallerContext context) throws Exception {
    Recipes recipes = new Recipes();

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

    JsonToken token = context.currentToken;
    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("Setup", targetDepth)) {
          context.nextToken();
          recipes.setSetup(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Configure", targetDepth)) {
          context.nextToken();
          recipes.setConfigure(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Deploy", targetDepth)) {
          context.nextToken();
          recipes.setDeploy(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Undeploy", targetDepth)) {
          context.nextToken();
          recipes.setUndeploy(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.getInstance())
                  .unmarshall(context));
        }
        if (context.testExpression("Shutdown", targetDepth)) {
          context.nextToken();
          recipes.setShutdown(
              new ListUnmarshaller<String>(StringJsonUnmarshaller.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 recipes;
  }
  public StackConfigurationManager unmarshall(JsonUnmarshallerContext context) throws Exception {
    StackConfigurationManager stackConfigurationManager = new StackConfigurationManager();

    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();
          stackConfigurationManager.setName(
              StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Version", targetDepth)) {
          context.nextToken();
          stackConfigurationManager.setVersion(
              StringJsonUnmarshaller.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 stackConfigurationManager;
  }
  public UserProfile unmarshall(JsonUnmarshallerContext context) throws Exception {
    UserProfile userProfile = new UserProfile();

    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("IamUserArn", targetDepth)) {
          context.nextToken();
          userProfile.setIamUserArn(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          userProfile.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("SshUsername", targetDepth)) {
          context.nextToken();
          userProfile.setSshUsername(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("SshPublicKey", targetDepth)) {
          context.nextToken();
          userProfile.setSshPublicKey(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("AllowSelfManagement", targetDepth)) {
          context.nextToken();
          userProfile.setAllowSelfManagement(
              BooleanJsonUnmarshaller.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 userProfile;
  }
  public Volume unmarshall(JsonUnmarshallerContext context) throws Exception {
    Volume volume = new Volume();

    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("VolumeId", targetDepth)) {
          context.nextToken();
          volume.setVolumeId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Ec2VolumeId", targetDepth)) {
          context.nextToken();
          volume.setEc2VolumeId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          volume.setName(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("RaidArrayId", targetDepth)) {
          context.nextToken();
          volume.setRaidArrayId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("InstanceId", targetDepth)) {
          context.nextToken();
          volume.setInstanceId(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Status", targetDepth)) {
          context.nextToken();
          volume.setStatus(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Size", targetDepth)) {
          context.nextToken();
          volume.setSize(context.getUnmarshaller(Integer.class).unmarshall(context));
        }
        if (context.testExpression("Device", targetDepth)) {
          context.nextToken();
          volume.setDevice(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("MountPoint", targetDepth)) {
          context.nextToken();
          volume.setMountPoint(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Region", targetDepth)) {
          context.nextToken();
          volume.setRegion(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("AvailabilityZone", targetDepth)) {
          context.nextToken();
          volume.setAvailabilityZone(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("VolumeType", targetDepth)) {
          context.nextToken();
          volume.setVolumeType(context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Iops", targetDepth)) {
          context.nextToken();
          volume.setIops(context.getUnmarshaller(Integer.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 volume;
  }
  public RaidArray unmarshall(JsonUnmarshallerContext context) throws Exception {
    RaidArray raidArray = new RaidArray();

    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("RaidArrayId", targetDepth)) {
          context.nextToken();
          raidArray.setRaidArrayId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("InstanceId", targetDepth)) {
          context.nextToken();
          raidArray.setInstanceId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Name", targetDepth)) {
          context.nextToken();
          raidArray.setName(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("RaidLevel", targetDepth)) {
          context.nextToken();
          raidArray.setRaidLevel(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("NumberOfDisks", targetDepth)) {
          context.nextToken();
          raidArray.setNumberOfDisks(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Size", targetDepth)) {
          context.nextToken();
          raidArray.setSize(IntegerJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Device", targetDepth)) {
          context.nextToken();
          raidArray.setDevice(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("MountPoint", targetDepth)) {
          context.nextToken();
          raidArray.setMountPoint(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("AvailabilityZone", targetDepth)) {
          context.nextToken();
          raidArray.setAvailabilityZone(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("CreatedAt", targetDepth)) {
          context.nextToken();
          raidArray.setCreatedAt(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("StackId", targetDepth)) {
          context.nextToken();
          raidArray.setStackId(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("VolumeType", targetDepth)) {
          context.nextToken();
          raidArray.setVolumeType(StringJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("Iops", targetDepth)) {
          context.nextToken();
          raidArray.setIops(IntegerJsonUnmarshaller.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 raidArray;
  }