@Override
  public void decode(ActiveMQBuffer buffer) {
    SimpleString policyStr = buffer.readNullableSimpleString();

    if (policyStr != null) {
      addressFullMessagePolicy = AddressFullMessagePolicy.valueOf(policyStr.toString());
    } else {
      addressFullMessagePolicy = null;
    }

    maxSizeBytes = BufferHelper.readNullableLong(buffer);

    pageSizeBytes = BufferHelper.readNullableLong(buffer);

    pageMaxCache = BufferHelper.readNullableInteger(buffer);

    dropMessagesWhenFull = BufferHelper.readNullableBoolean(buffer);

    maxDeliveryAttempts = BufferHelper.readNullableInteger(buffer);

    messageCounterHistoryDayLimit = BufferHelper.readNullableInteger(buffer);

    redeliveryDelay = BufferHelper.readNullableLong(buffer);

    redeliveryMultiplier = BufferHelper.readNullableDouble(buffer);

    maxRedeliveryDelay = BufferHelper.readNullableLong(buffer);

    deadLetterAddress = buffer.readNullableSimpleString();

    expiryAddress = buffer.readNullableSimpleString();

    expiryDelay = BufferHelper.readNullableLong(buffer);

    lastValueQueue = BufferHelper.readNullableBoolean(buffer);

    redistributionDelay = BufferHelper.readNullableLong(buffer);

    sendToDLAOnNoRoute = BufferHelper.readNullableBoolean(buffer);

    slowConsumerThreshold = BufferHelper.readNullableLong(buffer);

    slowConsumerCheckPeriod = BufferHelper.readNullableLong(buffer);

    policyStr = buffer.readNullableSimpleString();

    if (policyStr != null) {
      slowConsumerPolicy = SlowConsumerPolicy.valueOf(policyStr.toString());
    } else {
      slowConsumerPolicy = null;
    }

    autoCreateJmsQueues = BufferHelper.readNullableBoolean(buffer);

    autoDeleteJmsQueues = BufferHelper.readNullableBoolean(buffer);
  }