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

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

InvalidIndex

Komunikat o błędzie

Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub Edge Management API nie powiedzie się i wyświetli się 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 (Przypisywanie wiadomości) ma wartość 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API się nie uda.

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 zmienne zindeksowanego przepływu. Załóżmy, że chcesz przekazać identyfikatory 3 uczniów jako parametry zapytania, a potem możesz to zrobić w ten sposób:

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

Następnie załóżmy, że próbujesz uzyskać dostęp do tych parametrów zapytania przy użyciu numerów indeksu 0, 1 i 2 w zasadzie Przypisywanie wiadomości:

id.0
id.1 and
id.2

W tym przypadku wdrożenie serwera proxy się nie uda, 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”. Aby uzyskać dostęp do trzeciego parametru zapytania „id=3”, możesz też użyć parametru „id.3”.

Więcej informacji znajdziesz tutaj.

Diagnostyka

  1. Wskaż zasadę Assign Message (Przypisz wiadomość), w której wystąpił błąd, podaj nazwę atrybutu oraz 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żyty w pliku XML zasady przypisywania wiadomości są zgodne z nazwą atrybutu i indeksem określonym w komunikacie o błędzie (krok 1 powyżej). Na przykład ta zasada określa atrybut id i indeks jako 0, co odpowiada informacjom zawartym 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 ma wartość 0 lub liczbę ujemną, to jest to przyczyna błędu.

    W przedstawionym powyżej przykładowym przykładzie zasady przypisywania wiadomości próbujesz uzyskać dostęp do pierwszej wartości parametru zapytania „id”. dla indeksu 0. Z tego powodu wdrożenie serwera proxy interfejsu API kończy się niepowodzeniem i wyświetla się błąd:

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

Rozdzielczość

Gdy w sekcji Przypisz wiadomość uzyskujesz dostęp do wielu nagłówków, parametrów zapytania lub innych parametrów o takiej samej nazwie, upewnij się, że indeks jest zawsze większy niż zero. 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

Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge UI lub Edge Management API nie powiedzie się i wyświetli się 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 się nie uda, 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 na konkretnym serwerze proxy interfejsu API, na którym wystąpił błąd. Jeśli istnieje zasada Assign Message (Przypisz wiadomości), w której element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable>, to właśnie jest przyczyną błędu.

Przykład 1. Poniższa zasada Assign Message (Przypisywanie wiadomości) nie ma zdefiniowanego 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. Poniższa zasada Assign Message (Przypisywanie wiadomości) 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 może być pusty w elemencie <AssignVariable> zasady Assign Message (Przypisywanie wiadomości). 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>