public ReservedInstancesOffering unmarshall(StaxUnmarshallerContext context) throws Exception {
    ReservedInstancesOffering reservedInstancesOffering = new ReservedInstancesOffering();
    int originalDepth = context.getCurrentDepth();
    int targetDepth = originalDepth + 1;

    if (context.isStartOfDocument()) targetDepth += 1;

    while (true) {
      int xmlEvent = context.nextEvent();
      if (xmlEvent == XmlPullParser.END_DOCUMENT) return reservedInstancesOffering;

      if (xmlEvent == XmlPullParser.START_TAG) {
        if (context.testExpression("reservedInstancesOfferingId", targetDepth)) {
          reservedInstancesOffering.setReservedInstancesOfferingId(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("instanceType", targetDepth)) {
          reservedInstancesOffering.setInstanceType(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("availabilityZone", targetDepth)) {
          reservedInstancesOffering.setAvailabilityZone(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("duration", targetDepth)) {
          reservedInstancesOffering.setDuration(
              LongStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("usagePrice", targetDepth)) {
          reservedInstancesOffering.setUsagePrice(
              FloatStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("fixedPrice", targetDepth)) {
          reservedInstancesOffering.setFixedPrice(
              FloatStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("productDescription", targetDepth)) {
          reservedInstancesOffering.setProductDescription(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("instanceTenancy", targetDepth)) {
          reservedInstancesOffering.setInstanceTenancy(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("currencyCode", targetDepth)) {
          reservedInstancesOffering.setCurrencyCode(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("offeringType", targetDepth)) {
          reservedInstancesOffering.setOfferingType(
              StringStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("recurringCharges/item", targetDepth)) {
          reservedInstancesOffering
              .getRecurringCharges()
              .add(RecurringChargeStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("marketplace", targetDepth)) {
          reservedInstancesOffering.setMarketplace(
              BooleanStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
        if (context.testExpression("pricingDetailsSet/item", targetDepth)) {
          reservedInstancesOffering
              .getPricingDetails()
              .add(PricingDetailStaxUnmarshaller.getInstance().unmarshall(context));
          continue;
        }
      } else if (xmlEvent == XmlPullParser.END_TAG) {
        if (context.getCurrentDepth() < originalDepth) {
          return reservedInstancesOffering;
        }
      }
    }
  }