Вы просматриваете документацию Apigee Edge .
Перейдите к документации Apigee X. информация
ИнвалидИндекс
Сообщение об ошибке
Развертывание прокси-сервера 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».
Более подробную информацию вы можете найти здесь .
Диагностика
Определите политику назначения сообщения, в которой произошла ошибка, имя атрибута и недопустимый индекс. Все эти элементы вы можете найти в сообщении об ошибке. Например, в следующей ошибке имя политики —
GeneratingGeocodingRequest
, имя атрибута —id
, а индекс —0
:AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
Убедитесь, что имя атрибута и индекс, используемые в неудачном 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>
Если указанный индекс равен 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>
Неверное имя переменной
Сообщение об ошибке
Развертывание прокси-сервера 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 завершается неудачей, поскольку отсутствует допустимое имя переменной, которой можно присвоить значение. Требуется допустимое имя переменной.
Диагностика
Проверьте все политики назначения сообщений в конкретном прокси-сервере API, где произошел сбой. Если существует какая-либо политика назначения сообщений, в которой дочерний элемент <Name>
пуст или не указан в элементе <AssignVariable>
, это и есть причина ошибки.
Пример 1. В следующей политике назначения сообщения не определен элемент <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>