Rozwiązywanie problemów z błędami wdrażania zasad związanych z wiadomościami

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

InvalidIndex

Komunikat o błędzie

Wdrażanie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub interfejsu Edge Management API kończy się niepowodzeniem i wyświetla ten komunikat o błędzie:

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]

Przykładowy komunikat o błędzie

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

Przykładowy zrzut ekranu

Przyczyna

Jeśli indeks określony w elementach <Copy> lub <Remove> zasady Assign Message ma wartość 0 lub liczbę ujemną, wdrożenie serwera proxy interfejsu API nie powiedzie się.

Jeśli na przykład przekażesz wiele parametrów zapytania o tej samej nazwie, możesz uzyskać do nich dostęp w Edge jako do zmiennych przepływu indeksowanych. Załóżmy, że chcesz przekazać identyfikatory 3 uczniów jako parametry zapytania. Możesz to zrobić w ten sposób:

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

Załóżmy, że próbujesz uzyskać dostęp do tych parametrów zapytania za pomocą numerów indeksów 0, 1 i 2 w zasadach przypisywania wiadomości w ten sposób:

id.0
id.1 and
id.2

W tym przypadku wdrożenie serwera proxy nie powiedzie się, ponieważ indeks musi zaczynać się od 1. Oznacza to, że możesz uzyskać dostęp do pierwszego parametru zapytania „id=1” jako „id.1”. Aby uzyskać dostęp do drugiego parametru zapytania „id=2”, musisz użyć indeksu 2, czyli „id.2”. Podobnie, aby uzyskać dostęp do trzeciego parametru zapytania „id=3”, możesz użyć „id.3”.

Więcej informacji znajdziesz tutaj.

Diagnostyka

  1. Określ zasadę przypisywania wiadomości, w której wystąpił błąd, nazwę atrybutu i nieprawidłowy indeks. Wszystkie te elementy znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie nazwa zasady to GeneratingGeocodingRequest, nazwa atrybutu to id, a indeks to 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Sprawdź, czy nazwa atrybutu i indeks użyte w pliku XML nieudanej zasady przypisywania wiadomości są zgodne z nazwą atrybutu i indeksem zidentyfikowanymi w komunikacie o błędzie (krok 1 powyżej). Na przykład te zasady określają atrybut id i indeks jako 0, co odpowiada temu, co znajduje się w komunikacie o błędzie:

    <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. Jeśli podany indeks to 0 lub liczba ujemna, to jest to przyczyna błędu.

    W przykładzie zasady Assign Message pokazanym powyżej próbujesz uzyskać dostęp do pierwszej wartości parametru zapytania „id” za pomocą indeksu 0. Wdrożenie proxy interfejsu API nie powiodło się z powodu błędu:

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

Rozdzielczość

W przypadku przypisywania wiadomości, gdy uzyskujesz dostęp do wielu nagłówków, parametrów zapytania lub innych parametrów o tej samej nazwie, upewnij się, że indeks jest zawsze większy od zera. Na przykład:

<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

Komunikat o błędzie

Wdrażanie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub interfejsu Edge Management API kończy się niepowodzeniem i wyświetla ten komunikat o błędzie:

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

Przykładowy komunikat o błędzie

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

Przykładowy zrzut ekranu

Przyczyna

Jeśli element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable>, wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ nie ma prawidłowej nazwy zmiennej, do której można przypisać wartość. Wymagana jest prawidłowa nazwa zmiennej.

Diagnostyka

Sprawdź wszystkie zasady przypisywania wiadomości w konkretnym serwerze proxy interfejsu API, w którym wystąpił błąd. Jeśli w zasadach przypisywania wiadomości element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable>, to jest to przyczyną błędu.

Przykład 1. W zasadach przypisywania wiadomości nie zdefiniowano elementu <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>

Przykład 2. Ta zasada Assign Message zawiera pusty element <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>

Rozdzielczość

Upewnij się, że element podrzędny <Name> jest zawsze określony i nie jest pusty w elemencie <AssignVariable> zasady Assign Message. Na przykład:

<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>