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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

InvalidIndex

Komunikat o błędzie

Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge lub interfejsu Edge Management API kończy się niepowodzeniem i wyświetlany jest 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> w zasadzie przypisywania wiadomości wynosi 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API nie powiedzie się.

Jeśli na przykład przekazujesz wiele parametrów zapytania o tej samej nazwie, możesz uzyskać do nich dostęp w Edge jako zindeksowane zmienne przepływu. Jeśli 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

Następnie załóżmy, że próbujesz uzyskać dostęp do tych parametrów zapytania z numerami indeksu 0, 1 i 2 w zasadzie przypisywania wiadomości w następujący sposób:

id.0
id.1 and
id.2

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

Więcej informacji znajdziesz tutaj.

Diagnostyka

  1. Zidentyfikuj 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żyty w nieudanym pliku XML zasady przypisywania wiadomości są zgodne z nazwą atrybutu i indeksem wskazanym w komunikacie o błędzie (krok 1 powyżej). Na przykład ta zasada określa atrybut id i indeks jako 0, który jest zgodny z treścią komunikatu 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 przyczyną błędu.

    W przedstawionym powyżej przykładowej zasadzie przypisywania wiadomości próbujesz uzyskać dostęp do pierwszej wartości parametru zapytania „id”, używając 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 funkcji Przypisz wiadomość 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 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 lub interfejsu Edge Management API kończy się niepowodzeniem i wyświetlany jest 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 na konkretnym serwerze proxy interfejsu API, na którym wystąpił błąd. Jeśli istnieje jakaś zasada przypisywania wiadomości, w której element podrzędny <Name> jest pusty lub nie został określony w elemencie <AssignVariable>, to jest przyczyną błędu.

Przykład 1: poniższe zasady przypisywania wiadomości nie mają 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: w poniższej zasadzie przypisywania wiadomości występuje 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ść

Zadbaj o to, aby element podrzędny <Name> był zawsze określony i nie był pusty w elemencie <AssignVariable> w zasadach przypisywania 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>