Устранение неполадок при развертывании правил для сообщений

Вы просматриваете документацию по Apigee Edge.
Перейдите к документации по Apigee X.
Информация

InvalidIndex

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

Пример сообщения об ошибке

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

Пример скриншота

Причина

Если индекс, указанный в элементах <Copy> и/или <Remove> правила "Назначить сообщение", равен 0 или отрицательному числу, развертывание прокси API завершится неудачно.

Например, если вы передаете несколько параметров запроса с одинаковым названием, то в Edge сможете получить к ним доступ как к индексированным переменным потока. Предположим, вы хотите передать идентификаторы трех учащихся в качестве параметров запроса. Это можно сделать следующим образом:

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3

Предположим, вы пытаетесь получить доступ к этим параметрам запроса с помощью индексов 0, 1 и 2 в правиле "Назначить сообщение" следующим образом:

id.0
id.1 and
id.2

В этом случае развертывание прокси-сервера завершится неудачно, поскольку индекс должен начинаться с 1. Это означает, что вы можете получить доступ к первому параметру запроса "id=1" как "id.1". Чтобы получить доступ ко второму параметру запроса "id=2", нужно использовать индекс 2, то есть "id.2". Аналогично, чтобы получить доступ к третьему параметру запроса "id=3", можно использовать "id.3".

Более подробную информацию вы найдете в Справочном центре.

диагностика;

  1. Определите правило Assign Message, в котором произошла ошибка, название атрибута и недопустимый индекс. Все эти элементы можно найти в сообщении об ошибке. Например, в следующем сообщении об ошибке название правила – GeneratingGeocodingRequest, название атрибута – id, а индекс – 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Убедитесь, что название атрибута и индекс, используемые в XML-файле невыполненного правила "Назначить сообщение", совпадают с названием атрибута и индексом, указанными в сообщении об ошибке (шаг 1 выше). Например, в следующем правиле указан атрибут id и индекс 0, которые соответствуют информации в сообщении об ошибке:

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
  3. Если указанный индекс равен 0 или отрицательному числу, это и является причиной ошибки.

    В примере правила "Назначить сообщение", показанном выше, вы пытаетесь получить доступ к первому значению параметра запроса "id", используя индекс 0. Поэтому развертывание прокси API завершается неудачно с ошибкой:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

Разрешение

В Assign Message, когда вы обращаетесь к нескольким заголовкам, параметрам запроса или другим параметрам с одинаковым названием, убедитесь, что индекс всегда больше нуля. Пример:

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>

InvalidVariableName

Сообщение об ошибке

Развертывание прокси-сервера API через интерфейс Edge или API управления Edge завершается неудачно с сообщением об ошибке:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Пример сообщения об ошибке

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Пример скриншота

Причина

Если дочерний элемент <Name> пуст или не указан в элементе <AssignVariable>, развертывание прокси-сервера API завершится неудачно, поскольку не будет действительного имени переменной, которой можно присвоить значение. Укажите допустимое имя переменной.

диагностика;

Проверьте все правила Assign Message в определенном прокси API, где произошел сбой. Если в каком-либо правиле назначения сообщений дочерний элемент <Name> пуст или не указан в элементе <AssignVariable>, это и является причиной ошибки.

Пример 1. В следующем правиле Assign Message не определен элемент <Name>.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Пример 2. В следующем правиле "Назначить сообщение" элемент <Name> пуст.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name></Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Разрешение

Убедитесь, что дочерний элемент <Name> всегда указан и не является пустым в элементе <AssignVariable> правила "Назначить сообщение". Пример:

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
        <AssignVariable>
        <Name>appSecret</Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>