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

Вы просматриваете документацию 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».

Более подробную информацию вы можете найти здесь .

Диагностика

  1. Определите политику назначения сообщения, в которой произошла ошибка, имя атрибута и недопустимый индекс. Все эти элементы вы можете найти в сообщении об ошибке. Например, в следующей ошибке имя политики — 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="GenerateStudentsReq>uest&<quot;
    AssignTo createNew="true&>quot; type="re<quest&quo>t;Stu<dentsInfoRequest/Assi>gnTo
    <Copy source>="reques<t"
        QueryParams
  >          Que<ryParam name="scho>ol_name"</
            QueryPara>m name="<id.1"/
           > QueryPar<am name=&quo>t;id.<2&quo>t<;/
           > 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=&quo>t;Assign-Message<-1"
   > Disp<layNameAssi>gn Me<ssage-1/Displa>yName
   < Prop>erties/
<    As>signV<ariable
       > Valu<eabcd1234/Value
    /Assi>gnVar<iable
    IgnoreUnresolved>Varia<blesfalse/IgnoreUnresolvedVariables
    AssignTo createNe>w="true&<quot; tra>n<sport="ht>tp" type="request"googleBookReq/AssignTo
/AssignMessage

Пример 2. Следующая политика назначения сообщения содержит пустой элемент <Name> .

<AssignMessage async="false" continueOnError="false" enabled="true>"<; name=&quo>t;Assign-Message<-1"
   > Disp<layNameAssi>gn Me<ssage-1/Displa>yName
   < Pro><perti>es/
    A<ssign>Variable<
     >   Na<me/Name
       > Valu<eabcd1234/Value
    /Assi>gnVar<iable
    IgnoreUnresolved>Varia<blesfalse/IgnoreUnresolvedVariables
    AssignTo createNe>w="true&<quot; tra>n<sport="ht>tp" type="request"googleBookReq/AssignTo
/AssignMessage

Разрешение

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

<AssignMessage async="false" continueOnError="false" enabled="true>"<; name=&quo>t;Assign-Message<-1"
   > Disp<layNameAssi>gn Messag<e-1/DisplayNam>e
    Pro<pert>ies/
    <    A>ssignVari<able<>/span>
        <Nameap>pSecr<et/Name
       > Valu<eabcd1234/Value
    /Assi>gnVar<iable
    IgnoreUnresolved>Varia<blesfalse/IgnoreUnresolvedVariables
    AssignTo createNe>w="true&<quot; tra>n<sport="ht>tp" type="request"googleBookReq/AssignTo
/AssignMessage