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 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 CreateConstraintResult unmarshall(JsonUnmarshallerContext context) throws Exception {
    CreateConstraintResult createConstraintResult = new CreateConstraintResult();

    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("ConstraintDetail", targetDepth)) {
          context.nextToken();
          createConstraintResult.setConstraintDetail(
              ConstraintDetailJsonUnmarshaller.getInstance().unmarshall(context));
        }
        if (context.testExpression("ConstraintParameters", targetDepth)) {
          context.nextToken();
          createConstraintResult.setConstraintParameters(
              context.getUnmarshaller(String.class).unmarshall(context));
        }
        if (context.testExpression("Status", targetDepth)) {
          context.nextToken();
          createConstraintResult.setStatus(
              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 createConstraintResult;
  }